欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

qt自定义插件creator不显示_让Qt Creator更懂我们的自定义模块

发布时间:2024/9/15 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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更懂我们的自定义模块的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。