qt_generate_foreign_qml_types

あるターゲットの型をQMLモジュールに登録します。

このコマンドはQt6 パッケージのQml コンポーネントで定義されています:

find_package(Qt6 REQUIRED COMPONENTS Qml)

概要

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

バージョンレスコマンドが無効の場合は、qt6_generate_foreign_qml_types() 。このコマンドと同じ引数をサポートしています。

説明

qt_generate_foreign_qml_types QML登録マクロ( のような)によってマークされた型を から取り出し、QMLモジュール に外部型として登録します。QML_ELEMENT source_target destination_qml_target

これはQMLに直接依存することなく、QMLを任意に統合したライブラリを作成したい場合に便利です。

// myclass.h
#include <QtQmlIntegration/qqmlintegration.h>

class MyClass : public QObject
{
    QML_ELEMENT
    Q_OBJECT

    // [...]
};
# CMakeLists.txt
qt_add_library(mylib myclass.h ...)
target_link_libraries(mylib PRIVATE Qt::Core Qt::QmlIntegration)

qt_add_qml_module(mylib_declarative
  VERSION 1.0
  URI "mylib"
  ...
)
qt_generate_foreign_qml_types(mylib mylib_declarative)

注意: 上記の例では、mylibQtQmlQtQuick には依存せず、ヘッダのみの QmlIntegration ターゲット(QML_ELEMENT マクロを提供する QtQmlIntegration/qqmlintegration.h ヘッダ)にのみ依存します。

この効果は、QML_FOREIGN を QML ライブラリ内のカスタム構造体と共に使用して型を公開するのと同等です。

注意: 既存のシングルトンインスタンスのライフサイクルをQMLに公開するといったカスタムの 振る舞いを実装するためには、QMLライブラリにカスタム型を追加する必要があります (上の例では mylib_declarative)。その際、qt_generate_foreign_qml_types()がQML統合構造体を生成しないように、元のC++クラスからQML_ELEMENT や同様のマクロを省略する必要があります。QMLマクロは、シングルトンファクトリー関数と同様に、QML_FOREIGN を含む構造体に追加することができます。

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