QQmlEngineExtensionPlugin Class
QQmlEngineExtensionPlugin 类为自定义 QML 扩展插件提供了一个抽象基础。更多
Header: | #include <QQmlEngineExtensionPlugin> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
继承: | QObject |
- 所有成员的列表,包括继承成员
- QQmlEngineExtensionPlugin 属于插件类。
公共函数
QQmlEngineExtensionPlugin(QObject *parent = nullptr) |
重新实现的公共函数
virtual void | initializeEngine(QQmlEngine *engine, const char *uri) override |
宏
(since 6.2) | Q_IMPORT_QML_PLUGIN(PluginName) |
详细说明
QQmlEngineExtensionPlugin 是一个插件接口,可让您创建可动态加载到 QML 应用程序中的 QML 扩展。这些扩展允许 QML 引擎使用自定义 QML 类型。
要编写 QML 扩展插件
- 子类QQmlEngineExtensionPlugin 并使用Q_PLUGIN_METADATA() 宏向 Qt XML 元对象系统注册插件。
- 使用QML_ELEMENT 和QML_NAMED_ELEMENT() 宏声明 QML 类型。
- 配置编译文件。
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>
- 如果使用 qmake,请创建一个qmldir 文件来描述插件。注意 CMake 默认会自动生成qmldir 文件。
QML 扩展插件适用于特定应用程序或类似库的插件。库类插件应仅限于注册类型,因为对引擎根上下文的任何操作都可能在库用户的代码中引起冲突或其他问题。
注意: 使用 CMakeqt_add_qml_moduleAPI 时,会自动生成一个插件。它将负责类型注册。只有在有特殊要求(如注册自定义图像提供程序)时,才需要编写自定义插件。在这种情况下,请向qt_add_qml_module
调用NO_GENERATE_PLUGIN_SOURCE,禁止生成默认插件。
作为优化,链接器可能会错误地删除生成的类型注册函数。您可以在代码中声明一个指向该函数的合成易失性指针来防止这种情况。如果模块名为 "my.module",则应在全局作用域中添加前向声明:
void qml_register_types_my_module();
然后在任何与注册属于同一二进制的函数的实现中添加以下代码片段:
volatile auto registration = &qml_register_types_my_module; Q_UNUSED(registration);
用 C++ 编写 QML 扩展教程》(Writing QMLExtensions with C++tutorial)中也有一章是关于创建 QML 插件的。
另请参阅 QQmlEngine::importPlugin() 和如何创建 Qt XML 插件。
成员函数文档
[explicit]
QQmlEngineExtensionPlugin::QQmlEngineExtensionPlugin(QObject *parent = nullptr)
用给定的parent 构造一个 QML 扩展插件。
请注意,Q_PLUGIN_METADATA() 宏会自动调用该构造函数,因此无需明确调用。
[override virtual]
void QQmlEngineExtensionPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
使用engine 从uri 初始化扩展。例如,应用程序插件可能会向 QML 公开一些数据或对象,作为引擎根上下文的上下文属性。
宏文档
[since 6.2]
Q_IMPORT_QML_PLUGIN(PluginName)
确保元数据声明插件扩展类名为PluginName 的插件被链接到静态联编中。对于使用qt_add_qml_module 创建的模块,除非指定CLASS_NAME
参数,否则默认插件扩展类名称是根据 QML 模块 URI 计算得出的,将点替换为下划线。
例如
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 。
© 2025 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.