qt_generate_foreign_qml_types

Registers types from one target in a QML module.

The command is defined in the Qml component of the Qt6 package, which can be loaded like so:

find_package(Qt6 REQUIRED COMPONENTS Qml)

Note: This command is in technology preview and may change in future releases.

Synopsis

qt_generate_foreign_qml_types(
    source_target
    destination_qml_target
)

If versionless commands are disabled, use qt6_generate_foreign_qml_types() instead. It supports the same set of arguments as this command.

Description

qt_generate_foreign_qml_types extracts types marked via QML registration macros (like QML_ELEMENT) from source_target and registers them as foreign types in the QML module destination_qml_target.

This can be useful when one wants to create a library with optional QML integration, without depending directly on 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)

Note: In the example above, mylib does not depend on QtQml or QtQuick, but only on the header-only QmlIntegration target (for the QtQmlIntegration/qqmlintegration.h header, which provides the QML_ELEMENT macro).

The effect is equivalent to using QML_FOREIGN with custom structs in the QML library to expose the types.

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