QML用C++プラグインの作成
プラグインの作成
QML engine はQML用のC++プラグインを読み込みます。このようなプラグインは通常QMLの拡張モジュールとして提供され、 モジュールをインポートしたQML文書中のクライアントが使用する型を提供することが できます。モジュールが有効であるとみなされるためには、少なくとも1つの登録された型が必要です。
QQmlEngineExtensionPlugin はプラグイン・インターフェイスであり、QMLアプリケーションに動的に 読み込まれるQML拡張モジュールを作成することができます。このプラグインを利用することで、QMLエンジンが独自のQML型を利用できるようになります。
QML拡張プラグインを作成するには
- QQmlEngineExtensionPlugin をサブクラス化し、Q_PLUGIN_METADATA() マクロを使用して Qt メタオブジェクトシステムにプラグインを登録します。
- QML_ELEMENT とQML_NAMED_ELEMENT() マクロを使って QML タイプを宣言します。
- ビルドファイルを設定します。
CMake を使用してください:
qt_add_qml_module(<target> URI <my.import.name> VERSION 1.0 QML_FILES <app.qml> NO_RESOURCE_TARGET_PATH )
qmake:
CONFIG += qmltypes QML_IMPORT_NAME = <my.import.name> QML_IMPORT_MAJOR_VERSION = <version>
- qmakeを使っている場合は、プラグインを記述するqmldirファイルを作成する。CMakeはデフォルトでqmldirファイルを自動的に生成します。
QML拡張プラグインには、アプリケーション固有のプラグインと、ライブラリのようなプラグインがあります。ライブラリプラグインは、エンジンのルートコンテキストを操作することで、ライブラリユーザーのコードにコンフリクトやその他の問題を引き起こす可能性があるため、型の登録に限定してください。
注意: CMakeqt_add_qml_moduleAPI を使用すると、プラグインが自動的に生成されます。このプラグインが型の登録を行います。カスタムプラグインを作成する必要があるのは、カスタム画像プロバイダーの登録など、特別な要件がある場合だけです。その場合は、qt_add_qml_module
の呼び出しにNO_GENERATE_PLUGIN_SOURCE を渡して、デフォルト・プラグインの生成を無効にします。
リンカは最適化のために、生成された型登録関数を誤って削除することがあります。これを防ぐには、コードのどこかで関数への合成揮発性ポインターを宣言します。モジュールの名前が "my.module "であれば、グローバル・スコープに前方宣言を追加する:
void qml_register_types_my_module();
次に、登録関数と同じバイナリに含まれる関数の実装に、以下のコード・スニペットを追加する:
volatile auto registration = &qml_register_types_my_module; Q_UNUSED(registration);
参照
- Writing QML Extensions with C++- QMLプラグインの作成に関する章があります。
- C++からQMLの型を定義する- C++の型をランタイムに登録するための情報。
- How to Create Qt Plugins- Qt プラグインに関する情報です。
© 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.