打包发布:
使用QT自带工具(windeployqt )打包方法:
1、release编译生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:C:\Qt\helloQt\ 。
它的项目生成目录是 C:\Qt\build-helloQt-Desktop_Qt_5_4_0_MinGW_32bit-Release\ 。
进入这个文件夹,在进入它的子文件夹 release
里面,找到 helloQt.exe
,将这个exe 复制到一个新的单独的文件夹里用于发布,比如存到 D:\helloQt\ 文件夹里面,此时打开helloQt.exe
会提示缺少dll之类的信息,程序打不开。
2、“开始”菜单中打开Qt命令行工具:
如:Qt 5.4 for Desktop (MinGW 4.9 32 bit)
输入命令:cd /d D:\helloQt
进入D:\helloQt
文件夹之后,继续输入:windeployqt helloQt.exe
如果是QML程序,输入:
windeployqt helloQt.exe --qmldir D:\Qt\Qt5.4.0\5.4\mingw491_32\qml
**注意:**将上述代码的D:\Qt\Qt5.4.0\5.4\mingw491_32\qml
替换为你自己的Qt安装目录的qml文件夹路径。如果发布出现问题,将上述路径改为你自己程序.pro
文件所在路径。
之后会看到命令行进行了一系列操作,随后,D:\helloQt
文件夹中会出现helloQt.exe
运行所需文件,这时候打开helloQt.exe
程序就可以直接运行了。(当然,也有特殊情况,比如:如果使用了MySQL,还需要复制libmysql.dll
到这个文件夹)
程序发布时,按照上述方法,将helloQt.exe
改为你自己的程序名称,对应路径同步改一下即可。
这个时候,我们的程序如果需要发布,必须将整个文件夹发出去,显得有些繁重,有没有解决方案呢?有:
使用Engima Virtual Box
将我们的这个文件夹压缩为一个可执行文件:
下载地址:Engima Virtual Box
选择
安装之后,打开:
选择好路径之后,将可执行程序及其运行所需的文件加入,这里选择Add File(s)
可以加入文件,选择Add Folder Recursive
可以加入文件夹,当然,我们也可以选择将文件和文件夹一起拖进来,切记!一定要将可执行程序同目录所有文件及文件夹加进来!
最后,点击窗口右下角的Precess
片刻之后,就可以在我们的输出路径看到生成的EXE文件了,我们将新生成的EXE文件移动到其他没有运行环境的文件夹中,打开,程序正常运行。
下面是Qt官网对于windeployqt工具的描述:
用法:windeployqt [options] [files]
Qt部署工具5.9.0
使用windeployqt最简单的方法是添加Qt的bin目录
安装(例如<QT_DIR \ bin>)到PATH变量,然后运行:
windeployqt <path-to-app-binary>
如果ICU,ANGLE等不在bin目录中,则需要在PATH中
变量。如果您的应用程序使用Qt Quick,请运行:
windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>
选项:
- ?, -h,--help显示此帮助。
-v,--version显示版本信息。
--dir <目录>使用目录而不是二进制目录。
--libdir <path>将库复制到路径。
--plugindir <path>将插件复制到路径。
--debug假设调试二进制文件。
- 释放假设释放二进制文件。
--pdb部署.pdb文件(MSVC)。
- 强制更新文件。
- 慢跑模拟模式。正常行为,但不要
复制/更新任何文件。
--no-patchqt不要修补Qt5Core库。
--no-plugins跳过插件部署。
--no-libraries跳过库部署。
--qmldir <directory>从目录开始扫描QML-导入。
--no-quick-import跳过Qt Quick导入的部署。
--no-translations跳过翻译的部署。
--no-system-d3d-compiler跳过系统D3D编译器的部署。
--compiler-runtime部署编译器运行时(仅限桌面)。
--no-compiler-runtime不要部署编译器运行时(仅限桌面)。
--webkit2部署WebKit2(web进程)。
--no-webkit2跳过WebKit2的部署。
--json以JSON格式打印到stdout。
- 角度的角度部署。
- 无角度禁用ANGLE的部署。
--no-opengl-sw不要部署软件光栅化程序库。
--list <选项>只打印复制文件的名称。
可用选项:
source:源文件的绝对路径
目标:目标文件的绝对路径
relative:相对目标文件的路径
到目标目录
映射:输出源和相对
目标,适合在一个
Appx映射文件
--verbose <level>详细级别。
可以通过传递它们的名称(-xml)或通过传递来删除Qt库
该名称由--no-(--no-xml)前缀。可用的库:
蓝牙并发核心声明式设计器设计者组件
enginio gui qthelp多媒体multimediawidgets multimediaquick网络nfc
opengl定位printsupport qml qmltooling快速quickparticles quickwidgets
脚本scripttools传感器serialport sql svg测试webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput geoservices
webchannel texttospeech serialbus
参数:
[files]包含二进制文件的二进制文件或目录。
设置图标:
1、同步设置程序运行图标和程序桌面图标
1.1、选择一个你喜欢的ico图片文件,放在源码同级路径
1.2、在程序的.pro文件中添加一行代码:
RC_ICONS = app.ico //设置图标 或 RC_FILE = app.rc
//通过设置系统变量 VERSION 或 RC_ICONS (至少一个),qmake 会自动生成 .rc 文件。
VERSION = 1.0.0.0 //设置程序版本号,可省略
等号右侧是你的ico文件名称
1.3、重新编译运行程序
1.4、此后,我们就可以看到程序运行图标和程序桌面图标都变成了我们设置的ico图标
2、代码中单独设置程序运行图标
2.1、在项目中添加Qt资源文件Qt Resource File:
任意命名,路径选择自己图标所在文件夹,我这里命名为source,选择的image文件夹与项目源文件是同级目录
2.2、在项目源文件的构造函数内添加如下代码:
setWindowIcon(QIcon(":/source/image/tray.jpg"));
重新编译运行程序之后,程序的运行图标就变成了我们设置的图标,不过这种办法无法对程序桌面图标进行设置。