QQmlEngineExtensionPlugin 类

The QQmlEngineExtensionPlugin class provides an abstract base for custom QML extension plugins. More...

头文件 #include <QQmlEngineExtensionPlugin>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
继承 QObject

公共函数

QQmlEngineExtensionPlugin(QObject *parent = nullptr)

重写的公共函数

虚拟函数initializeEngine(QQmlEngine *engine, const char *uri) override

(自 6.2 版起) Q_IMPORT_QML_PLUGIN(PluginName)

详细描述

QQmlEngineExtensionPlugin 是一个插件接口,允许您创建可以动态加载到 QML 应用程序中的 QML 扩展。这些扩展允许自定义 QML 类型对 QML 引擎可用。

要编写 QML 扩展插件

  1. 子类 QQmlEngineExtensionPlugin 并使用 Q_PLUGIN_METADATA() 宏将插件注册到 Qt 元对象系统中。
  2. 使用 QML_ELEMENTQML_NAMED_ELEMENT() 宏来声明 QML 类型。
  3. 配置您的构建文件。

    CMake

    qt_add_qml_module(<target>
        URI <my.import.name>
        VERSION 1.0
        QML_FILES <app.qml>
        NO_RESOURCE_TARGET_PATH
    )

    qmake

    CONFIG += qmltypes
    QML_IMPORT_NAME = <my.import.name>
    QML_IMPORT_MAJOR_VERSION = <version>
  4. 如果您使用的是 qmake,则创建一个 qmldir 文件 来描述插件。请注意,CMake 默认会自动生成 qmldir 文件

QML 扩展插件是针对特定于应用程序或类似库的插件。库插件应限制自身只注册类型,因为对引擎根上下文任何操作都可能导致库用户代码中的冲突或其他问题。

注意:当使用 CMake qt_add_qml_module API 时,会为您自动生成一个插件。它会负责类型注册。只有当您有特殊需求时,例如注册自定义图像提供者,才需要编写自定义插件。在这种情况下,通过将 NO_GENERATE_PLUGIN_SOURCE 传递给 qt_add_qml_module 调用来禁用默认插件的生成。

连接器可能会错误地将生成的类型注册函数作为优化移除。您可以通过在您的代码中声明对该函数的合成 volatile 指针来防止这种情况。如果您的模块名为 "my.module",您将在全局范围添加前向声明。

void qml_register_types_my_module();

然后在注册相同的二进制文件的任何函数实现中添加以下代码片段

volatile auto registration = &qml_register_types_my_module;
Q_UNUSED(registration);

使用 C++ 编写 QML 扩展教程还包括关于创建 QML 插件的章节。

另请参阅QQmlEngine::importPlugin() 和 如何创建 Qt 插件

成员函数文档

[明确指定] QQmlEngineExtensionPlugin::QQmlEngineExtensionPlugin(QObject *parent = nullptr)

使用给定的 parent 构建一个 QML 扩展插件。

请注意,此构造函数由 Q_PLUGIN_METADATA() 宏自动调用,因此无需显式调用它。

[重写虚拟] void QQmlEngineExtensionPlugin::initializeEngine(QQmlEngine *engine, const char *uri)

使用 engine 初始化扩展自 uri。例如,应用程序插件可能会将其数据或对象公开给 QML,作为引擎根上下文中的上下文属性。

宏文档

[自 6.2 版起] Q_IMPORT_QML_PLUGIN(PluginName)

确保名为 PluginName 的元数据声明插件扩展类链接到静态构建中。对于使用 qt_add_qml_module 创建的模块,默认插件扩展类名称是通过将 QML 模块 URI 中的点替换为下划线计算的,除非指定了 CLASS_NAME 参数。

例如

qt_add_qml_module(myplugin
    # The plugin extension class name in this case is my_Company_QmlComponents.
    URI my.Company.QmlComponents
    ...
)

此宏是在 Qt 6.2 中引入的。

另请参阅Q_IMPORT_PLUGIN

© 2024 Qt 公司有限公司。此处包含的文档贡献的版权属于其各自的所有者。此处提供的文档是根据 Free Software Foundation 发布的 GNU 自由文档许可协议版本 1.3 的条款许可的。Qt 和相关徽标是芬兰 Qt 公司及其在全球的跨国公司或分支机构的商标。所有其他商标均为其各自所有者的财产。