Registers types from one target in a QML module.
命令的定义在
Qml
组件对于
Qt6
包,可以像这样加载:
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
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)
注意:
在以上范例中,
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.
注意: In order to implement custom behavior, such as exposing an existing singleton instance with its own life cycle to QML, you should add custom types to your QML library (mylib_declarative in the above example). In turn, you should omit the QML_ELEMENT and similar macros from the original C++ classes so that qt_generate_foreign_qml_types() does not generate more QML integration structs for them. The QML macros, as well as any singleton factory functions, can be added to the structs that contain the QML_FOREIGN .