Auf dieser Seite

qt_generate_foreign_qml_types

Registriert Typen aus einem Ziel in einem QML-Modul.

Der Befehl ist in der Komponente „ Qml “ des Pakets „ Qt6 “ definiert, das wie folgt geladen werden kann:

find_package(Qt6 REQUIRED COMPONENTS Qml)

Übersicht

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

Wenn versionsunabhängige Befehle deaktiviert sind, verwenden Sie stattdessen „ qt6_generate_foreign_qml_types() “. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.

Beschreibung

qt_generate_foreign_qml_types extrahiert über QML-Registrierungsmakros (wie QML_ELEMENT) markierte Typen aus source_target und registriert sie als fremde Typen im QML-Modul destination_qml_target.

Dies kann nützlich sein, wenn man eine Bibliothek mit optionaler QML-Integration erstellen möchte, ohne direkt von QML abhängig zu sein.

// 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)

Hinweis: Im obigen Beispiel hängt „ mylib “ nicht von „ QtQml “ oder „ QtQuick “ ab, sondern nur vom reinen Header-Ziel „ QmlIntegration “ (für den Header „ qqmlintegration.h “, der das Makro „ QML_ELEMENT “ bereitstellt).

Der Effekt entspricht der Verwendung von ` QML_FOREIGN ` mit benutzerdefinierten Strukturen in der QML-Bibliothek, um die Typen verfügbar zu machen.

Hinweis: Um benutzerdefiniertes Verhalten zu implementieren, wie beispielsweise die Bereitstellung einer bestehenden Singleton-Instanz mit eigenem Lebenszyklus für QML, sollten Sie Ihrer QML-Bibliothek (im obigen Beispiel „mylib_declarative“) benutzerdefinierte Typen hinzufügen. Im Gegenzug sollten Sie die Makros „ QML_ELEMENT “ und ähnliche aus den ursprünglichen C++-Klassen weglassen, damit „qt_generate_foreign_qml_types()“ keine weiteren QML-Integrationsstrukturen für diese generiert. Die QML-Makros sowie etwaige Singleton-Factory-Funktionen können den Strukturen hinzugefügt werden, die die „ QML_FOREIGN “ enthalten.

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