QQmlEngineExtensionPlugin Class

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

Header: #include <QQmlEngineExtensionPlugin>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Inherits: 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も参照してください

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