Windows下Qt5程序打包发布与图标设置

打包发布:

使用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命令行工具:
Windows下Qt5程序打包发布与图标设置_第1张图片
如: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
选择
Windows下Qt5程序打包发布与图标设置_第2张图片
安装之后,打开:
Windows下Qt5程序打包发布与图标设置_第3张图片
选择好路径之后,将可执行程序及其运行所需的文件加入,这里选择Add File(s)可以加入文件,选择Add Folder Recursive可以加入文件夹,当然,我们也可以选择将文件和文件夹一起拖进来切记!一定要将可执行程序同目录所有文件及文件夹加进来!
Windows下Qt5程序打包发布与图标设置_第4张图片
Windows下Qt5程序打包发布与图标设置_第5张图片
Windows下Qt5程序打包发布与图标设置_第6张图片
最后,点击窗口右下角的Precess
片刻之后,就可以在我们的输出路径看到生成的EXE文件了,我们将新生成的EXE文件移动到其他没有运行环境的文件夹中,打开,程序正常运行。
Windows下Qt5程序打包发布与图标设置_第7张图片
下面是Qt官网对于windeployqt工具的描述:

用法:windeployqt [options] [files]
Qt部署工具5.9.0

使用windeployqt最简单的方法是添加Qt的bin目录
安装(例如)到PATH变量,然后运行:
  windeployqt 
如果ICU,ANGLE等不在bin目录中,则需要在PATH中
变量。如果您的应用程序使用Qt Quick,请运行:
  windeployqt --qmldir  

选项:
  -  ?, -h,--help显示此帮助。
  -v,--version显示版本信息。
  --dir <目录>使用目录而不是二进制目录。
  --libdir 将库复制到路径。
  --plugindir 将插件复制到路径。
  --debug假设调试二进制文件。
  - 释放假设释放二进制文件。
  --pdb部署.pdb文件(MSVC)。
  - 强制更新文件。
  - 慢跑模拟模式。正常行为,但不要
                            复制/更新任何文件。
  --no-patchqt不要修补Qt5Core库。
  --no-plugins跳过插件部署。
  --no-libraries跳过库部署。
  --qmldir 从目录开始扫描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 详细级别。

可以通过传递它们的名称(-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"));

重新编译运行程序之后,程序的运行图标就变成了我们设置的图标,不过这种办法无法对程序桌面图标进行设置。

你可能感兴趣的:(QT)