首页 > 编程语言 >Qt 程序发布以及打包成exe安装包

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

时间:2022-09-02 14:35:20浏览次数:75  
标签:文件 exe Qt dll 文件夹 redplate 安装包

一、简述

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 风格的安装界面,足以完成一般安装任务。

官方下载地址:http://www.jrsoftware.org/isdl.php#stable

下载后直接安装即可。

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

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

img

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

img

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

img

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

img

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

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

img

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

img

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

img

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

img

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

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

img

img

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

; 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文件即可进行安装

标签:文件,exe,Qt,dll,文件夹,redplate,安装包
From: https://www.cnblogs.com/zzzsj/p/16649760.html

相关文章

  • 报错:①Tog goal specified requires a project to execute but there is no POM in th
    在运行Maven的命令时,在DOS窗口里面必须把目录切换到项目的根部,要不然命令是找不到目的地。下图是错误示范,项目在Demo02这个目录里,就必须将目录切换到Demo02下,否则DOS窗口......
  • 管理员身份之执行msi安装包
    方式一:以管理员身份运行CMD:在CMD中进入到.msi文件的目录下执行命令:msiexec/packageXXX(.msi文件名) ......
  • (课设)C/S架构即时聊天软件开发(QT)
     (课设)C/S架构即时聊天软件开发源点工作室毕设,作业,论文,考试疑难解答,源码均有,看简介加我。 3人赞同了该文章一、引言项目概述项目目的:在已......
  • Qt之TCP通信笔记-发送端、接收端、客户端、服务端及write()、read()
    一、QtTCP通信接收端(read()):1.从发射newConnection()信号开始(当有新的TCP连接,会发射newConnection()信号);2.当QTcpSocket缓存接收到新的数据时发射readyRead信号;3.连......
  • ThreadPoolExecutor 线程池的使用
    ThreadPoolExecutor这个类是JDK中的线程池类,继承自Executor,里面有一个execute()方法,用来执行线程,线程池主要提供一个线程队列,队列中保存着所有等待状态的线程。package......
  • linux下Qt5中qDebug信息不输出
    Qt5中qDebug信息不输出的解决方法Qt5中默认不输出调试信息,因此要输出调试信息时,需要修改配置。一、修改qt项目pro配置文件确保调试模式时,取消QT_NO_DEBUG_OUTPUT......
  • Google Chrome谷歌浏览器离完整离线安装包下载地址整理总汇
    每次重装系统,都要为安装Chrome而烦恼。虽然现在可以直接从谷歌浏览器官网下载在线安装包进行安装,但是在线安装包安装的版本不可控,大概率是x86版本,而且在断网状态下也......
  • 使用离线安装包搭建gitlab服务器
    1下载Gitlab服务器软件包下载地址:https://packages.gitlab.com/gitlab/gitlab-ce选择自己需要的版本下载即可,我是用的是centos7,所以我下载的是gitlab-ce-15.3.2-ce.0.e......
  • Qt开发经验小技巧241-245
    QString类是我个人认为Qt所有类中的精华,封装的无可挑剔。内置了各种进制数据的转换,比如将数据转成10进制、16进制显示,或者将10进制、16进制数据转成字符串显示。这里很容......
  • QT网络编程【二】【Socket】
    1.QT中添加socket库的相关操作2.正常c++11VS2019使用socket库的操作3.winsock2与sys/socket.h的区别?4.WinSock2的基本操作?5.socket的创建参数的说明[]:http://t......