c++ - 用户将如何在基于 QML 的插件系统中添加额外的功能?

标签 c++ qml qt5.3

我有一个小应用程序,用户可以在其中创建自己的插件作为 QML 文件。 这些插件会在发生某些事件时收到通知,并且它们的用户界面会在 TabView 中一一显示。

然而,有些插件需要 QML 无法提供的功能,例如写入文件。 我如何使我的用户能够随心所欲地扩展功能?

最佳答案

您的用户必须:

  1. 用 C++ 实现 QObject 以提供所需的功能。
  2. 子类 QQmlExtensionPlugin 以将该 QObject 注册为 QML 类型。
  3. 为#1 和#2 构建一个 DLL(或 SO 或 DYLIB),并编写一个 qmldir 文件来告诉 QML 引擎如何加载 DLL。

编辑: Qt Creator 会为您自动执行此过程的一部分。转到"file"->“新建文件或项目...”->“项目”->“库”->“Qt Quick 2 扩展插件”

您可以在文档中找到有关此过程的更多详细信息:

注意 1:您的用户不会编写 *.qml 文件。

注意 2:每个插件必须在其自己的子文件夹中。这是因为每个 C++ 插件都需要一个 qmldir 文件,但您不能在同一个文件夹中有多个 qmldir 文件。

您可以在 Qt 安装中找到一些实际示例。转到,比如说,C:\Qt\5.3\mingw482_32\qml——这里的所有子文件夹都包含 QML 插件,大部分是用 C++ 编写的。这是一些示例源代码:

关于c++ - 用户将如何在基于 QML 的插件系统中添加额外的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26821246/

相关文章:

qt - qml 无框窗口的阴影

c++ - 从 C++ 中的 QML 文件加载属性

c++ - 如何在 std::set 中存储指向对象的指针(或引用)

c++ - 如何使用 qt c++ 管理来自本地机器的网络流量

c++ - Qt Qml中的圆形图像

opengl-4 - OpenGL 4.1 和 Qt 5 的严重渲染问题

c++ - 确保使用 qRegisterMetaType() 注册了 'QAbstractSocket::SocketState'

c++ - 用于 Web 服务的 Doxygen?

c++ - 如何在编译时保存指向成员的指针?

javascript - 如何从外部函数访问TabView内部的QML元素?