WIN10关于QT Widgets Application项目打包的详细说明
目录
环境
win10系统、MSVC2017(64bit)、Qt Widgets Application项目
工具
1.windeployqt:qt自带打包工具,通过命令行使用,用于搜集所需要的dll
2.360任务管理器:用于查找windeployqt不能自动搜集的dll,手动添加
3.enigma virtual box:用于将配置好dll以及各种资源的项目文件夹打包成exe
百度云盘链接 提取码:fwzn
流程
在Release模式下,构建,运行,生成release版本的build目录
首先用QtCreator打开自己的项目,选择Release方式(默认是Debug),再构建,再运行。(可能直接运行也行,个人习惯如此)
成功运行程序后,打开项目所在目录,发现产生了一个release模式的build目录。(值得一提的是,如果在代码中使用本地文件,相对路径相对的是build目录,而不是源代码所在目录。)
windeployqt打包
程序exe文件运行的时候,需要一大堆dll,如果环境中没有这些dll则不能运行。这也是造成本机打包的程序在其他计算机环境无法运行的主要原因。关于动态链接库(dll)的详细介绍,可以参考:动态链接库(DLL)
首先进入Release模式产生的build文件夹,进入release文件夹,找到[你的项目名称].exe,下面以我的项目VirusCrisis.exe为例。
复制此exe至一空文件夹,(个人习惯,不使用带有中文的目录,可能会造成bug),比如在桌面上创建一个文件夹,命名为temp。
打开cmd,进入此目录(可以先右击属性,复制目录,然后粘贴上去),使用windeployqt打包,如下图
运行结果如下图
值得注意的是,我这里使用的是MSVC编译工具,如果Visual Studio的环境变量没有配好,会出现这样的错误
解决方法:在环境变量中添加VCINSTALLDIR,它的值为安装目录,我使用的是VS2017,配置如下
环境变量配置好后,把cmd关了重新打开,执行上述打包操作,就欧克了!
打开temp问价夹,可以发现windeployqt自动添加了很多运行所必备的文件。
进一步检查并添加dll
windeployqt虽然功能强大,但是不能添加一些用到的第三方库dll,为了避免缺失dll,使用360任务管理器进行进一步添加。
360管理器在360安全卫士的“功能大全”里,下载即可。
打开temp文件夹里的exe,让它运行。
右击,查看加载模块。
可以发现这些dll大概有三类,第一种位于C:\WINDOWS的系统dll,如果目标计算机环境的系统dll不缺失,这些dll不必添加。第二种是位于C:\Users\Lenovo\Desktop\temp的dll,是windeployqt已经配置好的。第三种,是第三方库dll。比如对于我这个项目,有
右击,打开所在目录,复制到temp文件夹即可。
添加必要的图片、声音等资源
一个完整的项目,往往需要图片、声音等素材,(我个人习惯是使用qrc资源文件添加资源)。将源代码的pro配置文件、qrc以及所使用的资源复制到temp即可。
打包成一个exe
enigma virtual box工具可以将刚刚打包好的文件夹整合成一个完整的exe。
打开此工具,在主程序文件名称选择temp文件夹下的exe,输出路径会自动给出,可以自行修改路径以及输出的exe名称。
点击添加,添加文件夹递归(x)
选择temp文件夹,点击确定
点击确定
点击文件选项
勾选压缩文件,点击确定
点击打包
打包结束后,到输出路径找到输出的exe即可。
缺陷
- 没有对系统dll进行配置,如果目标计算机与本机的系统有差异可能移植失败
- 仅仅给出使用qrc资源文件的图片声音资源的配置,如果项目使用的是本地文件的绝对路径,在资源添加的时候需要格外注意
- 仅限于Qt Widgets Application,Qt Quik Application的打包方法不同于此