设计和使用Qt Designer Widget插件时遇到的问题记录及解决方案

最近在学习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编译,这样才能链接上)
相关推荐
沐泽Mu6 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习
StringerChen7 小时前
Qt ui提升窗口的头文件找不到
开发语言·qt
沐泽Mu9 小时前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
沐泽Mu9 小时前
嵌入式学习-QT-Day09
开发语言·qt·学习
林浔090614 小时前
QT信号槽
开发语言·qt
kiiila14 小时前
【Qt】编辑框/按钮控件---实现HelloWorld
开发语言·qt
lw向北.20 小时前
Qt For Android之环境搭建(Qt 5.12.11 Qt下载SDK的处理方案)
android·开发语言·qt
小灰灰搞电子21 小时前
Qt实现Android的图案密码(图形解锁)源码分享
开发语言·qt
kiiila1 天前
【Qt】对象树(生命周期管理)和字符集(cout打印乱码问题)
开发语言·qt
黄金右肾1 天前
Qt之数据库使用(十四)
sql·qt·sqlite·database