qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块
用QML模块的方式组织软件是个不错的结构设计,笔者的QtQuick项目都会首先考虑QML模块的划分,然后以搭积木的方式完成最后的开发。
Qt Creator是开发QtQuick程序的首先IDE,因为它提供了很方便的代码提示和JS调试。但是笔者发现,项目中经常有成员抱怨自定义模块没有代码提示。这虽然不影响功能,但是却影响开发效率和开发体验。专为QtQuick开发的IDE居然对我们的QML模块一无所知,这没法忍。
这篇文章笔者将围绕这个问题,首先介绍Qt Creator是如何做到QML代码提示的,然后再讲如何让我们的自定义模块也能够支持代码提示。
回顾何为QML模块
QML模块是QML库的基本单元。具体的定义这里不赘述了,只挑几个要点回顾一下:要成为QML模块,必不可少的是两个条件:和模块名一致的文件夹名;
该文件夹下有一个qmldir文件,定义该QML模块的模块名(和文件夹名一致)以及其他的类型、资源。
可以有一个或多个C++编译而成的插件(一般就是一个插件,多了会影响性能);
可以有QML文件和JS文件。
上述都是影响QML模块功能的地方。之前我们开发QML模块时的注意力也在这些地方。但是Qt Creator的代码提示却不靠这个。
qmltypes文件
Qt Creator的代码提示靠的是后缀为qmltypes的文件。大家可以去Qt自带的QML模块看下,每个模块内都有一个qmltypes文件。当我们在QML代码中写下import XXX时,Qt Creator就会去找XXX模块文件夹下的qmltypes文件,然后解析,最后提供代码提示。
要想为我们自定义QML模块提供代码提示,关键是生成这个文件。
这个文件就是个文本文件,你可以打开查看。其实理论上你可以根据语法规则手写这个文件,但显然不是很好的做法。
具体方法
Qt其实自带了一个工具,位于bin目录里的qmlplugindump,是个命令行工具,可以用来生成qmltypes文件。假设模块名叫MyModule,具体过程如下:
1. 正常开发QML模块,编译好后使用windeployqt(MacOS上是macdeployqt)解决依赖。这个deploy工具如何使用请参看本专栏之前的一篇文章:陈锦明:使用CMake自动部署Qt Quick程序zhuanlan.zhihu.com
2. 确保编译生成的dll和qmldir等放在MyModule文件夹内,而MyModule文件夹和第1步部署后的其他QML模块同一层级,假设都位于c:/deploy。
3. 调用qmlplugindump,基本用法是:qmlplugindump MyModule 1.0 c:/deploy -nonrelocatable -output mymodule.qmltypes,这样就会生成mymodule.qmltypes文件。将其考到MyModule文件夹内即可。同时修改qmldir文件,加上:
typeinfo mymodule.qmltypes
此时我们的MyModule模块就完成了。
4. 在主界面工程中,如果是CMake工程,要在CMakeLists.txt中设置QML_IMPORT_PATH这个变量,而且要确保其写入到CMake Cache中,一般的写法是:
set(QML_IMPORT_PATH ${CMAKE_CURRENT_BINARY_DIR} CACHE STRING "qml import path"
其中,${CMAKE_CURRENT_BINARY_DIR} 是你放置MyModule模块的所在目录,你也可以放在别的地方。
5. 在主界面QML代码中,import MyModule 1.0之后,Qt Creator就能够自动加载对应的qmltypes文件了。
注意事项
笔者在实践中发现几个要注意的地方,列在下面和大家分享:要使Qt Creator正确加载qmltypes文件,请确保QML_IMPORT_PATH设置正确。如果是CMake工程,请确保它写入了CMakeCache.txt文件中。如果没有,可以清楚CMake配置,重新CMake;
Qt的bin目录中自带的是Release版的qmlplugindump,它只能正确处理我们Release版的插件编译结果,对于Debug版的是会报错的。解决办法有两个:只在Release时生成。其实qmltypes文件是一样的,Debug和Release可以复用;
自己去Qt源码中找到qmlplugindump的源码,然后编一个Debug版的。
可以使用CMake的add_custom_command命令将qmlplugindump的执行脚本化,这样可以让CMake每次编译时自动帮我们生成(或者更新)qmltypes文件。
总结
以上是生活随笔为你收集整理的qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: espflashdownloadtool
- 下一篇: java激励_激励---201218(激