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_ELEMENTQML_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拡張プラグインには、アプリケーション固有のプラグインと、ライブラリのようなプラグインがあります。ライブラリプラグインは、エンジンのルートコンテキストを操作することで、ライブラリユーザーのコードにコンフリクトやその他の問題を引き起こす可能性があるため、型の登録に限定してください。

注意: 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プラグインの作成に関する章もあります。

QQmlEngine::importPlugin() やQt プラグインの作り方も参照して ください。

メンバ関数ドキュメント

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

与えられたparent で QML 拡張プラグインを構築します。

このコンストラクタはQ_PLUGIN_METADATA() マクロによって自動的に呼び出されるので、明示的に呼び出す必要はないことに注意してください。

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

engine を使って、uri から拡張機能を初期化します。 ここで、アプリケーションプラグインは、例えば、エンジンのルートコンテキストのコンテキストプロパティとして、いくつかのデータやオブジェクトを 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も参照してください

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