制作Qt Quick 2 Extension Plugin的几个问题-Qt

经过几天的google和爬帖,加上自己的摸索,终于把新版的Qt Quick 2制作插件的问题给弄了个明白,工作流可以建立了。几个让我费了很多力气的问题,在此记录一下。

我们最终的目标是实现插件在Qt Creator中的顺利载入,并能够实现代码补全。

Point 1.

Qt Quick 2 使用qmlsecene而不像第一代使用qmlviewer(我很喜欢!因为调试功能很全,而qmlsecene就是光杆一个),插件的编译类型要选择对应的MinGW+Release方式生成。

Point 2.

在项目文件(.pro)中修改,假设要载入的插件放在pro文件所在文件夹中的plugin文件夹下面,具体方法:

qmlproject:

importPaths: [ "./plugin" ]
c++ project:

QML_IMPORT_PATH = plugin

Point 3.

修改过后, 就要注意看自己创建插件时指定的uri了。譬如cn.iyinchao,就要将编译好的dll譬如叫plugin.dll连同qmldir文件一同复制到对应的plugin/cn/iyinchao/下面。这样,在Qt Creator中就可以使用
import cn.iyinchao 1.0

导入插件。并且运行成功。
Point 4.

但是,当我使用自定义类,姑且叫它MyItem,仍然无法代码补全,下面有红波浪线(程序猿最怕看到啦)。帖子爬啊爬,终于在官方文档中看到,使用qmlplugindump,生成插件的信息(.qmltypes)就可以让Qt Creator正确读取typeinfo信息并进行补全了。打开命令行,运行:
qmlplugindump.exe -notrelocatable [cn.iyinchao 1.0] [path/to/plugin] > [path/to/plugin/cn/iyinchao/Name.qmltypes]

执行完,就可生成qmltypes文件。编辑qmldir文件,加入
typeinfo Name.qmltypes

就可以让Qt Creator实现代码补全了。
-notrelocatable 这点很重要,不加的话生成的qmltypes文件在我这里无效(这个知识找的很辛苦啊)
Final.

至此,我们可以正确地导入插件,并且让Qt Creator对我们的插件进行代码提示了。

—————————————————————————————————-

EDIT:

发现qmlsecene可以打开一些debug模式的。参见qmlsecene的源代码

例如使用slowAnimation:

qmlscene.exe –slow-animations -I [path/to/your/plugin] [path/to/the/qml/file.qml]

为什么加入了-notrelocatable之后,qmltypes起作用了呢?打开文件,发现只有一处不同:

未加入:

exports: ["MyModule 1.0"]

加入后:

exports: ["cn.iyinchao/MyModule 1.0"]

估计是给出了uri,与import的uri相符,才找到了对应的对象MyModule。只是猜想

posted on 2015-03-26 11:17  蚂蚁跳楼  阅读(2416)  评论(0编辑  收藏  举报