識別モジュール
識別モジュールとは、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
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.