識別モジュール
識別モジュールとは、QMLエンジンにインストールされ、ドット付き識別子文字列の URIによって識別可能なモジュールのことです。この識別子は、モジュールがqmldir
ファイルで指定する必要があります。これにより、モジュールがローカルのファイルシステムのどこにあっても、 一意な識別子でインポートすることができます。
識別されたモジュールをインポートする場合、引用符で囲まれていない識別子が使われ、オプションでバージョン番号が付けられます:
import QtQuick import com.nokia.qml.mymodule 1.0
識別されたモジュールは、QMLエンジンが検出するために、インポートパスにインス トールされていなければなりません。
構文的には、URI のドット区切りの各セグメントは整形式の ECMAScript Identifier Name でなければならない。これは、例えば、セグメントが数字で始まったり、-(マイナス)文字が含まれていたりしてはならないことを意味する。URIはディレクトリ名に変換されるので、ラテンアルファベットの英数字、アンダースコア、ドットに制限する必要があります。
ローカルにインストールされた特定モジュール
QML および/または C++ ファイルのディレクトリは、モジュールのメタデータを含むqmldir ファイルがQML のインポートパスにインストールされていれば、特定モジュールとして共有することができます。ローカルファイルシステム上のQMLファイルであれば、モジュールのURIを参照するimport文により、このディレクトリをモジュールとしてインポートすることができ、モジュールが定義するQMLオブジェクトタイプや JavaScriptリソースを利用することができるようになります。
モジュールのqmldir
ファイルは、URI のドット付き識別子文字列を反映したimport パス内のディレクトリ構造に存在しなければなりません。例えば、モジュールcom.mycompany.mymodule
のqmldir
ファイルは、インポートパスのどこかのサブパスcom/mycompany/mymodule/qmldir
に配置されなければならない。
異なるバージョンのモジュールをそれ自身のサブディレクトリに格納することが可能です。たとえば、あるモジュールのバージョン 2.1 をcom/mycompany/mymodule.2/qmldir
またはcom/mycompany/mymodule.2.1/qmldir
の下に置くことができます。 エンジンは自動的に、最も適合するモジュールをロードします。
別の方法として、qmldirファイル自体に異なるタイプのバージョン管理を定義することもできますが、この場合、モジュールの更新が難しくなります(更新手順の一部として、qmldir
ファイルのマージが必要なため)。
例
次のようなQMLプロジェクトのディレクトリ構造を考えてみましょう。myapp
というトップレベルのディレクトリの下に、mycomponents
というサブディレクトリに共通のUIコンポーネントがあり、main
というサブディレクトリにメインのアプリケーションコードがあります:
myapp |- mycomponents |- CheckBox.qml |- DialogBox.qml |- Slider.qml |- main |- application.qml
mycomponents
ディレクトリを識別されたモジュールとして利用できるようにするには、そのディレクトリに、モジュール識別子を定義し、モジュールによって利用可能になるオブジェクト・タイプを記述したqmldir ファイルを含める必要があります。例えば、CheckBox
、DialogBox
、Slider
のタイプをモジュールのバージョン1.0で利用できるようにするには、qmldir
ファイルに次のように記述します:
module myapp.mycomponents CheckBox 1.0 CheckBox.qml DialogBox 1.0 DialogBox.qml Slider 1.0 Slider.qml
さらに、インポートパスの qmldir
ファイルの場所は、モジュールのドット付き識別子文字列と一致しなければなりません。つまり、トップレベルmyapp
ディレクトリがC:\qml\projects
にあり、モジュールが "myapp.mycomponents" として識別されなければならないとします。この場合
C:\qml\projects
のパスをインポートパスに追加する。- qmldir ファイルは以下の場所にあります。
C:\qml\projects\myapp\mycomponents\qmldir
これが完了すると、ローカルファイルシステム上の任意の場所にある QML ファイルは、その URI と適切なバージョンを参照することで、モジュールをインポートすることができます:
リモートでインストールされた識別モジュール
識別されたモジュールはネットワークリソースとしてもアクセス可能です。先ほどの例では、C:\qml\projects
ディレクトリがhttp://www.some-server.com/qml/projects
としてホストされ、この URL が QML のインポートパスに追加されていれば、まったく同じ方法でモジュールをインポートすることができます。
ネットワーク経由でモジュールをインポートする場合、モジュールが提供する QML と JavaScript のリソースにしかアクセスできないことに注意してください。
識別されたモジュールのセマンティクス
識別されたモジュールは、QMLエンジンによって以下のことが保証されます:
- 他のモジュールはそのモジュールの名前空間内の型を変更したり上書きしたりできない。
- 他のモジュールはモジュールの名前空間に新しい型を登録することができない。
- クライアントによる型名の使用は、指定されたバージョニングとインポートの順序によって、与えられた型定義に決定論的に解決されます。
これにより、モジュールを使用するクライアントは、モジュールで定義されたオブジェクト型がモジュール作者の文書どおりに動作することを保証することができます。
識別されたモジュールにはいくつかの制約があります:
- 識別されたモジュールはQMLのインポートパスにインストールされなければならない。
- module identifier ディレクティブで指定されたモジュール識別子は、 モジュールのインストールパス(QML のインポートパスからの相対パスで、 ディレクトリの区切り文字はピリオド文字に置き換えられます)と一致しなければなりません。
- モジュールはその型をモジュール識別子の型名前空間に登録しなければなりません。
- モジュールは他のモジュールの名前空間に型を登録してはいけません。
例えば、識別されたモジュールが$QML_IMPORT_PATH/ExampleModule
にインストールされる場合、モジュール識別子ディレクティブはこうでなければなりません:
module ExampleModule
厳密なモジュールが$QML_IMPORT_PATH/com/example/CustomUi
にインストールされている場合、モジュール識別子ディレクティブは次のようにしなければなりません:
module com.example.CustomUi
クライアントは、次の import 文で上記のモジュールをインポートすることができます:
import com.example.CustomUi
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。