QML モジュール
QMLモジュールは、バージョン管理された型やJavaScriptのリソースを、 モジュールをインポートしたクライアントが使用できる型名前空間に提供します。モジュールが提供する型は、プラグイン内のC++で定義されることもあれば、 QML文書で定義されることもあります。モジュールはQMLのバージョン管理システムを利用することで、モジュールの独立した更新を可能にします。
QMLモジュールを定義することにより、以下のことが可能になります:
- 例えば、異なるウィンドウで使用されるUIコンポーネントのグループなどです。
- QMLベースのライブラリの配布
- 個別の機能をモジュール化することで、アプリケーションは個々のニーズに必要な ライブラリのみをロードすることができます。
- 型やリソースのバージョン管理により、クライアントコードを壊すことなく、 モジュールを安全に更新することができます。
QML モジュールの定義
注意: QML モジュールの定義にはCMake API を使用してください。QML モジュールを手動で定義するのは、qmake
を使う場合だけにしてください。
モジュールはモジュール定義 qmldir ファイルによって定義されます。各モジュールには関連する型名前空間があり、これがモジュールの識別子となります。モジュールはQMLのオブジェクト型(QMLドキュメントまたはC++プラグインで定義)やJavaScriptのリソースを提供し、クライアントからインポートすることができます。
モジュールを定義するためには、開発者はモジュールに含まれる様々なQML文書、JavaScriptリソース、C++プラグインを1つのディレクトリに集め、適切なモジュール定義qmldirファイルを記述して、そのディレクトリに置く必要があります。そして、そのディレクトリをモジュールとしてQMLのインポートパスにインス トールします。
モジュールを定義することだけが、プロジェクト内で共通のQML型を共有する 唯一の方法ではないことに注意してください。
QMLモジュールの種類
QMLがサポートするモジュールは2種類あります:
識別モジュールは、その識別子を明示的に定義し、QMLのインポートパスに インストールされます。識別モジュールは(型がバージョン管理されるため)より保守性が高く、 QMLエンジンによる型登録保証が提供されますが、レガシーモジュールには提供されません。レガシーモジュールは、レガシーコードを最新バージョンのQMLで動作させるためにのみサポートされるものであり、クライアントは可能な限り避けるべきです。
クライアントはQML文書やJavaScriptファイルからQMLモジュールをインポートすることができます。QMLモジュールのインポートについては、QMLモジュールのインポートに関するドキュメントを参照してください。
C++プラグインでの型と機能の提供
C++で多くのロジックを実装しているアプリケーションや、C++で型を定義し、 それをQMLに公開しているアプリケーションでは、QMLプラグインを実装したいと思うかもしれません。QML拡張モジュールの開発者は、よりよいパフォーマンスや柔軟性を得るために、(QMLドキュメントで型を定義するのではなく)C++プラグインで型を実装したいと考えるかもしれません。
QMLのC++プラグインには必ず初期化関数があり、プラグインのロード時にQMLエンジンから呼び出されます。この初期化関数は、プラグインが提供するすべての型を登録しなければなりませんが、それ以外のことは行ってはいけません(例えば、QObjectのインスタンス化は禁止されています)。
詳しくはC++ プラグインの作成を参照してください。
Modern QML modulesおよびPort QML modules to CMakeも参照して ください。
© 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.