Qt之程序发布以及打包成exe安装包目录

news2025/2/25 15:58:58

Qt之程序发布以及打包成exe安装包

目录

  • 一、简述
  • 二、设置应用程序图标
  • 三、发布程序
  • 四、打包程序


回到顶部

一、简述

Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以发布了。

回到顶部

二、设置应用程序图标

我们编译好生成的 exe 文件的图标是 Qt 自带的一个白色的框框,不太好看,怎么能够自己设置程序的图标呢。先创建一个 ico 格式的文件,网上有很多在线就可以把 png 或 jpg 的图片转成 ico 格式的图标文件,然后把 ico 文件放到源代码目录下,就是 .pro 文件的同一文件夹下。

在.pro项目文件中添加:

RC_ICONS = car.ico // 这里的car.ico是我的ico文件的名字,改成你自己的ico文件名

添加完后一定要重新 qmake 一遍,然后再运行一遍你的程序,这样再看你的 debug 或者 release 文件夹下的 exe 文件就会有你设置好的图标了。

回到顶部

三、发布程序

发布程序首先要获得所依赖的 dll 文件,这里有两种方法。方法一就是去 Qt 安装目录的 bin 目录(笔者这里是F:\technology\Qt5.9.7\5.9.7\mingw53_32)中找所依赖的 dll 文件。方法二就是使用 Qt 自带的发布程序工具 windeployqt.exe,可以生成所依赖的 dll 文件。这里着重讲解第二种方法,步骤如下:

(1)以 Release 方式编译生成 exe 程序,也就是调试运行的方式选择 Release

运行成功后,如果勾选了 “shadow build” 将源码路径和构建路径分开,那么将在 build-cleanRobot-Desktop_Qt_5_9_7_MinGW_32bit-Release 文件夹下生成 exe 文件,如下图1所示; 否则在源码工程目录下的 release 文件夹下生成 exe 文件,如下图2所示。

将 cleanRobot.exe 可执行文件复制到别的文件夹下,这里我复制到 F:\cleanRobot 下,然后在 “开始菜单Qt5.9.7” 下找到 “Qt 5.9.7 for Desktop cmd” 运行文件,打开运行。

执行 cd F:\cleanRobot 命令进入exe 文件所在目录下, 再执行 dir 命令查看目录,最后执行 windeployqt cleanRobot.exe 命令,Qt 就会自动把该程序所需要的所有 dll 拷贝过来。

当然有可能有些 dll 不是我们需要的,例如下面的 D3Dcompiler_47.dll,为了使发布程序尽可能的小,可以把这些 dll 一个一个删掉,再打开 exe 程序,看哪些 dll 是删掉后就打开不了程序的,保留下来,剩下的删除即可。

再将自带文件夹,例如下图的 image 文件夹复制过来,删掉不必要的 dll,之后的 exe 安装包文件夹如下图所示。

其实到这一步,就可以将整个文件夹发布出去了,但如果想打包成一个 exe 安装包,就要进行下面的步骤了。

回到顶部

四、打包程序

Inno Setup 是一个免费的 Windows 安装程序制作软件,小巧、简便、精美是其最大特点,支持 pascal 脚本,能快速制作出标准 Windows2000 风格的安装界面,足以完成一般安装任务。

官方下载地址:Inno Setup Downloads

下载后直接安装即可。

项目开发完成之后,需要打包程序发行,可以使用 Inno Setup 软件制作安装 exe。以下详细讲解如何打包应用程序:

(1)打开 Inno Setup Complier,点击 【file】→【new】,新建一个脚本向导程序,然后点击【next】;

(2)在应用程序信息中输入 “应用程序名称”、“应用程序版本”、“应用程序发布者”、“应用程序网站”,这些信息会自动在脚本中生成,然后点击下一步;

(3)自定义打包文件的的输出地址以及输出文件夹的名称,然后点击下一步;

(4)选择应用程序的主执行文件,也就是你编译生成的 exe 文件,下面点击 “Add folder ”,把所有你的程序运行需要的 dll 和资源以及配置文件放在一个文件夹里,选择这个文件夹,然后点击下一步;

注:Add folder 添加 .exe 的父文件夹,将依赖的 dll 等文件全部包含在内。

(5)输入应用程序在开始菜单中显示的名字,需要哪些功能,在前边打上对勾,一般默认即可,然后点击下一步;

(6)这里可以选择 “许可文件”,“安装前的文件”(如 Readme 文件等),“安装后显示信息” 等,然后点击下一步;

(7)选择 “安装语言”,然后点击下一步;

(8)选择 “自定义编译器输出文件夹”、“编译器输出基本文件名”、“自定义的安装程序图标文件”及“安装密码”,然后点击下一步;

注:第一个选项表示的是生成的 安装包*.exe 的输出目录。icon文件是 安装包*.exe 的图标文件。

(9)在这里选择是否使用 #define 编译指令,选择 yes 也就是在生成的脚本里使用 #define 宏定义一些常量,方便脚本编写,勾不勾选随意,然后点击下一步;

前面最后一步中间会询问你是否立即编译新的脚本,这个脚本是根据刚才我们前面填写的那些内容自动生成的。可以直接使用编译,也可以自己重新编写,下面贴出生成的脚本代码。

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "红牌检测系统"
#define MyAppVersion "2.5"
#define MyAppPublisher "SHIOTC, Inc."
#define MyAppURL "http://www.shiotc.com/"
#define MyAppExeName "redplate_qt.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{D21B4F6B-401E-4575-B6E1-612A9CA50D58}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:/redplate_detection_v2.5
DefaultGroupName=redplate_detection_v2.5
OutputDir=E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release
OutputBaseFilename=redplate_detection_2.5
;SetupIconFile=E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\ICON.ico
Password=123456
Compression=lzma
SolidCompression=yes

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\redplate_qt.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\carriage_recognition\redplate_detection\qt\redplate_qt_svm2\x64\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
  • 运行过程中出现错误,可以直接在脚本中进行修改。
  • 如果要打包出新版本的 exe 安装包文件,不需要再将上面流程走一遍,只需要将原先的 exe 可执行文件替换掉,再打开原先生成的脚本文件运行,即可生成新版本的 exe 安装包文件。

最后就生成了 exe 安装包文件,点击打开exe文件即可进行安装,如下图所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hiveSql调优

一、hiveSQL执行顺序 from … where … mapjoin … on … select(筛选有用字段) … group by ||… join … on … select(筛选输出字段) … having … distinct … order by … limit … union/union all|| 前是map阶段执行&…

五月最近一次面试,被阿里P8测开虐惨了...

都说金三银四涨薪季,我是着急忙慌的准备简历——5年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程...薪资要求?5年测试经验起码能要个20K吧 我加班肝了一页半简历,投出去一周,面试电话倒是不少&a…

自动化测试框架类型,你知道几种?此处介绍5种比较常见的

每一个测试人员都应该了解每种框架的优缺点,以帮助你的团队更好地确定最适合的测试的框架,以达到事半功倍。 什么是测试自动化框架? 自动化测试框架就是用于测试自动化的框架。具体来说,它提供了自动化测试用例编写、自动化测试用例执行、自…

分布式ID的选择

一、分布式ID策略 1.目前数据库主键ID生成的策略整理了这么几个,我们分析下每个的问题 1.1 数据库自增ID分析 我们创建数据库的时候,指定我们的id字段是主键,并且是自增的 create table demo_table ( id int(10) primary key auto_increm…

【个人笔记】真寻bot部署记录+源码食用记录

安装 0. 系统配置 Centos v8.2 1. 安装 使用真寻bot https://github.com/zhenxun-org/zhenxun_bot-deploy bash <(curl -s -L https://raw.githubusercontent.com/zhenxun-org/zhenxun_bot-deploy/master/install.sh)选择1&#xff0c;安装go-cqhttp和zhenxun_bot&…

SQL Developer如何导入时间格式的字段?

SQL developer有一个非常好用的功能&#xff0c;就是导入本地的数据文件。但是导入文件时&#xff0c;如果含时间字段&#xff0c;常常无法导入成功&#xff0c;如何解决&#xff1f; 第一步&#xff1a;处理表格时间格式 选中时间列&#xff0c;右击弹出【设置单元格格式】—…

指令微调数据集整理

文章目录 开源指令数据集斯坦福数据链家数据 垂直领域数据集医疗领域的英文数据医疗领域的中文数据 COIG数据集&#xff08;可商用的中文数据集&#xff09; 开源指令数据集 斯坦福数据 斯坦福52K英文指令数据&#xff1a;https://github.com/tatsu-lab/stanford_alpaca 52K …

硬件工程师-电路设计2-RC电路

RC滤波 滤波 把干扰的杂波滤除掉。 问题&#xff1a;为什么R和C可以实现滤波&#xff1f; 源 回路 阻抗 理想中的信号源是没有干扰的 实际中是有干扰的 受磁场 电场 地的影响&#xff0c;信号源会耦合一些高频干扰波进来&#xff0c;驼在信号源上。 ---…

链接思想的力量:如何将你的思维联系起来以提高你的学习和记忆能力

是否发现自己收藏的笔记很少做回顾和复盘&#xff1f; 链接你的思维&#xff08;LYT&#xff09;是另一个笔记系统&#xff0c;LYT笔记系统理念进入个人知识管理&#xff08;PKM&#xff09;会提供更有效和令人满意的笔记体验。 在今天的文章中&#xff0c;您将了解什么是链接…

踩坑记录:python + appium +adb 运行出现问题

搭建使用appium运行的环境&#xff0c;准备做个自己的app自动化&#xff0c;环境均已搭建好&#xff0c; appium-doctor 均正常使用 使用python下载Appium-Python-Client &#xff0c;pip 默认安装是最新版本&#xff0c;然后编写demo测试 from appium import webdriver i…

赛灵思-Zynq UltraScale+ MPSoC:QT与OPENCV交叉编译环境搭建

赛灵思-Zynq UltraScale MPSoC&#xff1a;QT与OPENCV交叉编译环境搭建 1、MPSOC 交叉编译环境简介 使用Linux交叉编译工具在开发中可以摆脱对petalinux的依赖&#xff0c;直接使用Linux交叉编译工具进行编译&#xff0c;可以使开发更加便捷。 由于获取Linux编译工具链需要用…

如何在华为OD机试中获得满分?Java实现【跳跃游戏 II】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

MyBatis中discriminator鉴别器如何使用?你若不会,我手把手教你 | 超级详细,建议收藏

1. 前言 不知道大家在平时有没有手写sql的习惯&#xff0c;当还没有开源mybatis-plus时&#xff0c;手写sql那是非常的常见&#xff0c;但是在维护一个老项目的时候&#xff0c;竟然勾起了我的一丝回忆。涉及到一个需求&#xff0c;我要追溯到它sql语句上&#xff0c;发现了一个…

【PC迁移与管理】上海道宁为每个用户和每个 PC 传输和迁移场景提供解决方案——PCmover

PCmover 是一款 可以自动将所有选定文件、 文件夹、设置、用户配置文件 甚至应用程序 从旧PC传输、恢复和升级到 新PC或操作系统的软件 而且由于 大多数迁移的应用程序 都已安装在新PC上即可使用 通常无需查找旧CD 以前下载的程序 序列号或许可证代码 开发商介绍 La…

mongodb-分片集群-搭建

分片集群 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。 为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。 垂直扩展&#xff1a;增加更多的…

嵌入式 QT 基于mplayer的音乐播放器

1、实现功能 2、音乐播放界面 2.1 界面程序 2.1.1 界面控制初始化 2.1.2 控件风格程序 3、 歌曲列表界面 3.1.1 在 widget.h 定义 QListWidge 对象指针 3.1.2 在 memberInit 函数中添加 QlistWidge 初始化 3.1.3 在 setMusicPlayStyle 函数中设置其风格 4、音乐播放功…

第四章 程序的控制结构

文章目录 第四章 程序的控制结构4.1 程序的三种控制结构4.1.1 程序流程图4.1.2 程序控制结构基础4.1.3 程序控制结构扩展 4.2 程序的多分支结构4.2.1 单分支结构&#xff1a;if4.2.2 二分支结构&#xff1a;if-else4.2.3 多分支结构&#xff1a;if-elif-else4.2.4 判断条件及组…

Github Copilot AI配对开发者编程,提升项目建设进度

Github Copilot是什么&#xff1f; GitHub Copilot 是结对编程的虚拟版本。结对编程是一种常见的敏捷软件开发技术 —— 即两个开发人员在同一个项目上并肩协作&#xff0c;轮流编写代码并检查合作伙伴的输出。 Copilot 可以支持十几种语言&#xff0c;与 Python、JavaScript、…

一文揭秘高效稳定的 Apache Doris 内存管理机制

作者&#xff1a;SelectDB 高级研发工程师、Apache Doris Committer 邹新一 背景 Apache Doris 作为基于 MPP 架构的 OLAP 数据库&#xff0c;数据从磁盘加载到内存后&#xff0c;会在算子间流式传递并计算&#xff0c;在内存中存储计算的中间结果&#xff0c;这种方式减少了频…

Vue2创建脚手架小案例

Vue CLI是一个官方提供的命令行工具&#xff0c;用于快速创建Vue.js项目和管理项目依赖项。下面是使用Vue CLI创建Vue.js项目的基本步骤&#xff1a; 首先&#xff0c;确保已安装Node.js和npm包管理器。可以在终端输入以下命令来检查它们的版本&#xff1a; node -v npm -v如…