再利用可能な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.txtqt_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 で読み込まれる QML ファイルでこのモジュールを使えるようにするには、読み込めるプラグインが必要です。プラグインは、実際にライブラリとリンクし、型が登録されるようにします。

プラグインの自動生成は、モジュールが型の登録以外に何も行わない場合にのみ可能であることに注意してください。initializeEngine で画像プロバイダを登録するような高度なことをする必要がある場合は、やはり手動でプラグインを書く必要があります。qt6_add_qml_moduleNO_GENERATE_PLUGIN_SOURCE でこれをサポートしています。

また、ディレクトリレイアウトの規則に従うことは、ツールの作成に役立ちます。このレイアウトはビルドディレクトリでも反映されます。つまり、ビルドディレクトリへのパスを(-I フラグで)QMLツールに渡せば、プラグインを見つけることができます。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。