QMLの基礎 - QMLファイルのインクルード

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要



最も簡単な方法

MyText.qmlファイルにコンポーネントが記述されているとする。

MyText.qmlファイルがmain.qmlファイルと同階層にある場合、以下のように記述することにより、コンポーネントを直接読み込むことができる。
この時、読み込まれるQMLファイル名は、大文字で始まる必要がある。

 // MyText.qml
 
 Text {
    text:"Hello, Scooby Doo!";
 }


 // main.qml
 
 Rectangle {
    id: root
 
    MyText {
       text: "This is my custom text element"
    }
 }


MyText.qmlがMyComponentsサブディレクトリに存在する場合、例えば、サブディレクトリに存在する全てのカスタムコンポーネントをグループ化するためには、
まず、MyComponentsサブディレクトリをインポートする必要がある。

上記と同様に、読み込まれるQMLファイル名は、大文字で始まる必要がある。

 // main.qml
 
 import "MyComponents"
 
 Rectangle {
    id: root
 
    MyText {
       text: "This is my custom text element"
    }
 }


Loaderを使用する方法よりも、上記の方法が最も簡単である。

Loaderを使用する方法

例えば、以下のようなプロジェクトディレクトリの構造があるとする。

プロジェクトディレクトリ
↪  qmlディレクトリ
   ↪  main.qml
   ↪  mytext.qml


 // mytext.qml
 
 Text {
    text:"Hello, Scooby Doo!";
 }


この時、main.qmlファイルにおいて、以下のようにmytext.qmlファイルを読み込む必要がある。

 // main.qml
 
 Rectangle {
 
    // ...略
 
    Loader {
       source:"mytext.qml";
    }
 
    // ...略
 }



備考

インポートされたQMLファイルは、ファイル名と同じ名前(大文字で始まり、.qml接尾辞を除いたもの)の型を定義する。
QMLでは、このような型を再利用可能なコンポーネントと呼ぶ。

この型の名前を使用して、インポートしたQMLファイルの中のオブジェクトをインスタンス化する。

C言語のインクルードのように、インクルードファイルのテキストがインクルードファイルに挿入されるわけではなく、
Pythonのように、クラス名をインポートして、インポートされたファイルでそのクラスのオブジェクトをインスタンス化するようなものに近い。

あるいは、JavaScriptのように、インポートされたファイルがプロトタイプのオブジェクトを作成して、それをプロトタイプとして継承している。
ただし、ルートオブジェクトとコンポーネントのどのプロパティが表示されるかについては注意する必要がある。

Cのインクルード、Pythonのインポート、JavaScriptの継承のように、インポートされたファイルの全てにアクセスできるわけではない。

再利用可能なコンポーネントについては、Qtのドキュメントを参照すること。