Qt打包应用程序及避坑


Qt打包应用程序及避坑

关于这个主题,网上的内容不计其数,在本人参考教程实现自己的工程时却遇到了各种各样的BUG,特此撰写文章,加以整理,以备以后查阅。


Qt版本:5.12.12
编译器版本:MinGW 7.3.0 x64
操作系统:Windows11 家庭版 x64


1、构建生成exe文件

在Qt的IDE中测试运行无误后,点击左下角将构建方式改为release,然后点击构建按钮,开始构建。

构建完成后,在工程目录下找到release文件夹,找到刚刚生成的工程名.exe
此时双击运行该exe是无法运行的,提示缺失各种dll文件。

2、使用windeployqt工具

首先在任意位置新建一个文件夹,将工程名.exe复制到该文件夹中,比如我在桌面新建了Bing文件夹。然后( 这里有个坑,需要注意!! )在你的Qt安装目录下,找到编译器的bin文件夹。
比如我的我目录是C:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin,在此文件夹下存在windeployqt.exe工具,不同编译器的目录下均存在一个windeployqt.exe,但我们应该选择自己的工程构建时使用的编译器的目录。
在该目录下打开powershell(cmd都一样),输入

./windeployqt.exe "C:\Users\Jae Fu\Desktop\Bing\ShapeWidget.exe"

此时双击该exe,发现还是打不开,缺少另外的dll。缺少的3个dll都是编译器相关,直接在C:\Qt\Qt5.12.12\5.12.12\mingw73_64\bin搜索并复制过去即可。
而使用windeployqt工具的目的是方便的将需要的dll文件复制。
此时不出意外,是可以成功运行的。将该文件夹压缩发给你的好友,ta就能运行了。

3、打包成单个exe

给人家用还要压缩,别人还要解压缩,太麻烦了!
参考这篇知乎,使用Enigma Virtual Box工具对其打包。

4、体积减小办法

生成的exe往往体积会很大,我们可以通过删除掉一些没有使用到的dll来节省空间。
比如我的程序只用到了gif图片,这些dll都是没有用到的,保留qgif.dll就可以了。
但是别的哪些可以删除,哪些不可以删除还是需要自己尝试,或者说有更加规则的办法?欢迎交流。

5、tips

  • 可以使用windeployqt -v命令查看其目录(where命令咋出不来啊)
  • 如何确保别人也能使用?开个没装Qt的虚拟机试试。

6、参考

CSDN:QT项目中release用的是哪个编译器,就应该运行哪个bin文件下对应的windeployqt.exe