このページでは

QQmlEngineExtensionPlugin Class

QQmlEngineExtensionPlugin クラスは、カスタム QML 拡張プラグインのための抽象基底クラスを提供します。詳細...

ヘッダー: #include <QQmlEngineExtensionPlugin>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
継承元: QObject

パブリック関数

QQmlEngineExtensionPlugin(QObject *parent = nullptr)

再実装されたパブリック関数

virtual void initializeEngine(QQmlEngine *engine, const char *uri) override

マクロ

(since 6.2) Q_IMPORT_QML_PLUGIN(PluginName)

詳細な説明

QQmlEngineExtensionPlugin は、QML アプリケーションに動的に読み込める QML 拡張機能を作成できるプラグインインターフェースです。これらの拡張機能により、カスタム QML タイプを QML エンジンで利用できるようになります。

QML拡張プラグインを作成するには:

  1. QQmlEngineExtensionPlugin をサブクラス化し、Q_PLUGIN_METADATA()マクロを使用して、Qtメタオブジェクトシステムにプラグインを登録します。
  2. QML_ELEMENT およびQML_NAMED_ELEMENT() マクロを使用して、QML 型を宣言します。
  3. ビルドファイルを設定します。

    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>
  4. qmake を使用している場合は、プラグインを記述するためのqmldir ファイルを作成してください。なお、CMake ではデフォルトでqmldir ファイルが自動的に生成されます。

QML拡張プラグインは、アプリケーション固有のプラグイン、またはライブラリ型のプラグインのいずれかに使用されます。ライブラリ型プラグインは、型の登録に限定すべきです。エンジンのルートコンテキストを操作すると、ライブラリ利用者のコードで競合やその他の問題が発生する可能性があるためです。

注: CMakeのqt_add_qml_moduleAPIを使用する場合 、プラグインは自動的に生成されます。これにより、型の登録は自動的に行われます。カスタム画像プロバイダの登録など、特別な要件がある場合にのみ、カスタムプラグインを作成する必要があります。その場合は、qt_add_qml_module の呼び出しにNO_GENERATE_PLUGIN_SOURCE を渡して、デフォルトのプラグインの生成を無効にしてください。

リンカーは最適化の一環として、生成された型登録関数を誤って削除してしまう可能性があります。これを防ぐには、コード内のどこかに、その関数への合成のvolatileポインタを宣言してください。この関数はqmltyperegistrarによって生成され、qml_register_types_ にモジュールURIを連結した名前が付けられ、ドットはすべてアンダースコアに置き換えられます。

モジュール名が「my.module」の場合、グローバルスコープに以下の前方宣言を追加します。

void qml_register_types_my_module();

次に、登録関数と同じバイナリに含まれる任意の関数の実装内に、以下のコードスニペットを追加します:

volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);

「C++ を使用した QML 拡張機能の作成」チュートリアルには、QML プラグインの作成に関する章も含まれています。

「Qtプラグインの作成方法」も参照してください 。

メンバ関数のドキュメント

[explicit] QQmlEngineExtensionPlugin::QQmlEngineExtensionPlugin(QObject *parent = nullptr)

指定されたparent を使用して、QML拡張プラグインを構築します。

なお、このコンストラクタはQ_PLUGIN_METADATA()マクロによって自動的に呼び出されるため、明示的に呼び出す必要はありません。

[override virtual] void QQmlEngineExtensionPlugin::initializeEngine(QQmlEngine *engine, const char *uri)

`uri ` から、`engine` を使用して拡張機能を初期化します。ここでは、例えば、アプリケーションプラグインが、エンジンのルートコンテキスト上のコンテキストプロパティとして、QML に対して一部のデータやオブジェクトを公開する場合があります。

マクロのドキュメント

[since 6.2] Q_IMPORT_QML_PLUGIN(PluginName)

メタデータを宣言するプラグイン拡張クラスの名前が `PluginName ` であるプラグインが、静的ビルドにリンクされるようにします。`qt_add_qml_module` を使用して作成されたモジュールの場合、CLASS_NAME 引数が指定されていない限り、デフォルトのプラグイン拡張クラス名は、QML モジュールの URI からドットをアンダースコアに置き換えることで算出されます。

例:

qt_add_qml_module(myplugin
    # The plugin extension class name in this case is my_Company_QmlComponents.
    URI my.Company.QmlComponents
    ...
)

このマクロは Qt 6.2 で導入されました。

Q_IMPORT_PLUGINも参照してください 。

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