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



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

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

您的用户必须:

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

编辑: Qt Creator会为您自动执行此过程。转到"文件"->"新建文件或项目…"->"项目"->"库"->"Qt Quick 2扩展插件"

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

  • 如何编写C++插件:http://qt-project.org/doc/qt-5/qtqml-modules-cppplugins.html
  • 插件文件放在哪里,以及如何加载它们:http://qt-project.org/doc/qt-5/qtqml-modules-identifiedmodules.html

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

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

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

  • BluetoothSocket QML类型的C++代码:http://code.woboq.org/qt5/qtconnectivity/src/imports/bluetooth/qdeclarativebluetoothsocket_p.h.html
  • 注册BluetoothSocket类型(以及其他类型)的C++代码:http://code.woboq.org/qt5/qtconnectivity/src/imports/bluetooth/plugin.cpp.html

相关内容

  • 没有找到相关文章

最新更新