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_typessource_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 不依赖于 QtQmlQtQuick,而只依赖于仅包含头文件的 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. 的 商标。所有其他商标均为其各自所有者的财产。