このページでは

QML モジュール

QMLモジュールは、バージョン管理された型やJavaScriptのリソースを、 モジュールをインポートしたクライアントが使用できる型名前空間に提供します。モジュールが提供する型は、プラグイン内のC++で定義することもできますし、 QMLドキュメントで定義することもできます。モジュールはQMLのバージョン管理システムを利用することで、モジュールの独立した更新を可能にします。

QMLモジュールを定義することにより、以下のことが可能になります:

  • 例えば、異なるウィンドウで使用されるUIコンポーネントのグループなどです。
  • QMLベースのライブラリの配布
  • 個別の機能をモジュール化することで、アプリケーションはそれぞれの必要性に応じて必要なライブラリのみをロードすることができます。
  • 型やリソースのバージョン管理により、クライアントコードを壊すことなくモジュールを安全に更新することができます。

最新のQMLモジュール

QML モジュールは CMake API、特にqt_add_qml_module を使って定義するのが最適です。以下の節では、最新の QML モジュールを作成するためのあらゆる側面について説明します。

QML ドキュメントによるオブジェクト型の定義

QML の型は QML ドキュメントで直接定義することができます。大文字で始まる各QMLファイルには、同じモジュール内の他のQMLファイルでも使用可能な型が自動的に定義されます。

C++からのQML型の定義

よりよいパフォーマンスや低レベルのAPIを利用するために、C++で型を定義し、 QMLに公開することができます。C++ の型は、静的型付けやコンパイルの恩恵を受けながら、プロパティ、メソッド、 シグナルを完全に制御することができます。

CMakeですべてをまとめる

qt_add_qml_module CMakeコマンドはQMLファイル、C++型、リソースを1つのモジュールにまとめます。型登録、 Resource Compiler、 QMLツールの統合が自動的に行われるため、最新のQMLモジュール開発にお勧めの方法です。

QML モジュールの最新化

このガイドでは、古い CMake ベースの QML モジュールを新しいバージョンの Qt に移行する方法を説明します。新しい CMake ポリシーに適応する方法や、時代遅れの手法を避ける方法について説明しています。

QML モジュールの微調整

Writing QML Modulesの高度なモジュール設定オプションにより、モジュールの動作をきめ細かく制御することができます。これには、同じバイナリに複数の QML モジュールを追加する方法、バージョン管理、カスタムディレクトリレイアウト、QML プラグインに関する高度なトピックなどが含まれます。

古い QML モジュール

Note: QML モジュールを定義するには、CMake API を使用してください。qmake を使う必要がある場合のみ、QML モジュールを手動で定義してください。

モジュールはモジュール定義 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のインスタンス化は禁止されています)。

詳しくは「QML用C++プラグインの作成」を参照してください。

QML モジュールの近代化」および「QML モジュールの CMake への移植」も参照して ください。

© 2026 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.