再利用可能な QML モジュールのビルド
以下の例では、C++ を QML から利用できるようにするライブラリの作成方法を示します。この例のディレクトリ構造は次のようになります。
├── CMakeLists.txt
└── example
└── mylib
├── CMakeLists.txt
├── mytype.cpp
├── mytype.h最上位のCMakeLists.txt ファイルでは、qt_standard_project_setup()を使用して基本的な設定を行い、その後add_subdirectory を使用してmylib内のモジュールをインクルードします:
cmake_minimum_required(VERSION 3.16)
project(qmlmodule VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 REQUIRED COMPONENTS Qml)
qt_standard_project_setup(REQUIRES 6.5)
add_subdirectory(example/mylib)サブディレクトリの構造は、QMLモジュールのURIに対応していますが、ドットがスラッシュに置き換えられています。これは、エンジンがインポートパス内でモジュールを検索する際に使用するロジックと同じです。このサブディレクトリ構造に従うことで、ツールの利用が容易になります。
mytype.h クラスを宣言し、宣言型登録マクロを使用してそれをエンジンに公開します。
サブディレクトリ内の `CMakeLists.txt ` ファイルで、`qt_add_qml_module()` を呼び出します。「QML アプリケーションのビルド」と比較すると、呼び出し方法は若干異なります:
qt_add_qml_module(mylib
URI example.mylib
VERSION 1.0
SOURCES
mytype.h mytype.cpp
QML_FILES
MyQmlType.qml
)mylib のターゲットは、これまでに作成されていません。qt6_add_qml_module に渡されたターゲットが存在しない場合、自動的にライブラリターゲットが作成されます。これにより、qt_add_library()を別途呼び出す必要がなくなります。C++で定義されたQML型を登録するには、そのヘッダーファイルとソースファイルをSOURCESパラメータの引数として追加します。
プロジェクトのビルド時には、ライブラリに加えて QML プラグインもビルドされます。プラグインの自動生成されたクラスはQQmlEngineExtensionPlugin を継承しています。mylib ライブラリ自体には、エンジンに型を登録するためのコードがすでに含まれています。ただし、これはライブラリに対してリンクできる場合にのみ有用です。qml (QML Runtime ツール)によって読み込まれるQMLファイルでモジュールを使用可能にするには、読み込み可能なプラグインが必要です。このプラグインは、実際にライブラリに対してリンクを行い、型が確実に登録されるようにする役割を担います。
なお、プラグインの自動生成は、モジュールが型の登録以外の処理を行わない場合にのみ可能です。initializeEngine への画像プロバイダの登録など、より高度な処理が必要な場合は、依然として手動でプラグインを作成する必要があります。qt_add_qml_module()は、NO_GENERATE_PLUGIN_SOURCE においてこの機能をサポートしています。
また、ディレクトリ構成の規約に従うことで、ツールの利用が容易になります。この構成はビルドディレクトリにも反映されます。つまり、QMLツールにビルドディレクトリへのパスを(-I フラグを介して)渡すことで、ツールがプラグインを自動的に見つけることができます。
© 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.