最近在学习Qt中的自定义插件和库,然后在设计和使用Qt Desiger Widget插件时,发现无法找到我自己设计的Widget插件,于是分析和查询了一番,又发现了好多问题,最后一步一步分析与查询,最终成功解决了问题,成功使用自己的自定义插件,在这过程中也对一些构建配置、链接库有了更深的理解。
问题描述
Qt自定义的widget插件无法在Designer中显示
首先检查自己项目文件夹中release版本,发现里面只有.dll文件而没有.lib文件,于是我怀疑是不是构建配置的环境有问题,查寻帮助文档以及一些提示,发现Qt自带默认的编译器是 MinGW,Windows 平台 Qt Creator 是由 Visual Studio 编译生成的程序(MSVC编译),两个编译器不一样,这样在就导致在Qt Designer无法加载出来自定义好的插件。 那么如何才能在Qt Creator中使用自定义的插件呢?目前得知两种方法:
- 一是用MinGW编译一一个Qt Creator,这样Qt Creator就能加载出MinGW编译出来的插件了
- 二是使用MSVC版本来构建,用其重新编译一下自定义的插件,这样就能直接加载了
这里我使用的是第二种方法。
MinGW和MSVC
搜寻资料发现,当用MinGW编译时,会生成.dll文件和.a文件,而当用MSVC编译时,会生成.dll文件和.lib文件,这也就是为什么一开始我的release文件夹中没有找到.lib文件的原因。
- 首先检查配置,打开Qt Creator-->工具-->选项-->构建-->Kits
- 点击Compilers,查看是否有VS的MSVC版本
- 点击Debuggers,查看是否有对应的Windows Kits
(因为VS我之前下载过,所以上面两个都自动检测到了,如果没有的话得自己下一个VS配个环境),
- 点击Qt Version, 查看是否有MSVC的版本,发现没有,则接下来就去安装对应的组件
MaintenanceTool使用与镜像源
- 打开MaintenanceTool.exe(通常在Qt安装目录下能够找到)
- 推荐使用国内镜像源(不用也可以,但时常下载缓慢甚至出错):点击设置-->档案资料库-->用户定义的档案资料库-->添加-->粘贴镜像源的地址(可在download.qt.io/static/mirr... 里选择,我这里用的是中科大的)-->点击条件测试-->显示成功则没问题
- 点下一步到选择组件,注意把Archive勾上然后筛选 ,完成后选择对应版本的Qt(如我的是Qt6.2.4),选择对应的MSVC组件,勾上后选择下一步,安装然后等待完成即可
编译链接
安装成功后,我们回到Qt Creator的Kits,在Qt Version中添加刚下载好的MSVC版本,然后在kits中配置好编译环境 接下来我们打开原来的自定义插件项目,执行对应的release编译即可生成MSVC版本的文件,这下在release文件夹里面能够看到.dll文件和.lib文件了。把.dll文件拷贝到Qt\Tools\QtCreator\bin\plugins\designer下,之后我们打开一个项目,打开Qt Designer就能看到并使用自定义的插件了。
但是这样项目还运行不起来,因为我们没有把lib库给这个项目,导致无法找到,接下来执行步骤:
- 把.dll文件和.lib以及生成的.h文件拷贝到使用项目的目录中去,我们可以建一个目录命名为lib用来存放
- 在Qt Creator中,右击项目选择添加库,然后按照说明选择刚才拷贝的.lib以及路径,点击确定
- 最后右键项目run qmake一下然后执行编译即可成功构建项目并运行(这里需要注意的,是用release版本的库,那使用时就得也用release编译,这样才能链接上)