用户将如何在基于QML的插件系统中添加额外的功能?
问题描述:
我有一个小应用程序,用户可以创建自己的插件作为QML文件。 这些插件会在某些事件发生时收到通知,并且它们的用户界面将逐个显示在TabView中。用户将如何在基于QML的插件系统中添加额外的功能?
然而,一些插件需要通过QML无法提供的功能,如写入文件。 我如何让我的用户可以随意扩展功能?
答
您的用户必须:
- 实现C++一个QObject提供所需的功能。
- 子类
QQmlExtensionPlugin
将QObject注册为QML类型。 - 为#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类型
感谢您的准确的答案。这对我帮助很大。 只有一个关于导入路径的问题。所有的用户插件在一个名为plugins的文件夹中都有自己的目录。我怎样才能一次导入它们? – Hedge 2014-11-10 09:56:25
查看QQmlEngine文档:http://qt-project.org/doc/qt-5/qqmlengine.html寻找像'importPlugin()'和'pluginPathList()这样的函数' – JKSH 2014-11-15 03:10:42