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
从 source_target
提取通过 QML 注册宏(如 QML_ELEMENT)标记的类型,并将它们注册为 QML 模块中的外部类型 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)
注意:在上述示例中,mylib
不依赖于 QtQml 或 QtQuick,而只依赖于仅包含头文件的 QmlIntegration 目标(对于 QtQmlIntegration/qqmlintegration.h 头文件,它提供了 QML_ELEMENT
宏)。
此效果与在 QML 库中使用 QML_FOREIGN
与自定义结构暴露类型的设置相当。
注意:为了实现自定义行为,例如向 QML 暴露具有自身生命周期的现有单例实例,应在您的 QML 库中添加自定义类型(如上述示例中的 mylib_declarative)。反过来,您应该从原始 C++ 类中省略 QML_ELEMENT 和类似宏,以便 qt_generate_foreign_qml_types() 不会为它们生成更多的 QML 集成结构。可以将 QML 宏以及任何单例工厂函数添加到包含 QML_FOREIGN 的结构中。
© 2024 The Qt Company Ltd. 本文档中的文档贡献归其各自所有者所有。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可版 1.3 的条款许可。Qt 和相应的标志是芬兰和/或其他国家的 The Qt Company Ltd. 的 商标。所有其他商标均为其各自所有者的财产。