当前位置: 首页 > news >正文

Qt开发——Qt项目打包、整合以及生成安装包保姆级教程(Windows系统)

目录

Windows下打包Qt项目

1.Qt系统环境变量的配置

 2.打包

3.打包整合为一个.exe文件

4.生成安装包


        做完了一个Qt项目之后,要干嘛呢,很显然要打包给别人,让别人也能使用这个软件,本期我们就来学习Qt打包,本期内容分为Windows下和Linux下的打包封装,打包好的文件发给别人只需要点击执行就行了,就跟你下载了一个软件双击即可执行,这是作为开发者必备的打包能力,下面一起来学习吧!

Windows下打包Qt项目

在Qtcreator下点击构建,下面我有这么一个简单的界面作为示例,这里我要对这个界面进行打包。

1.Qt系统环境变量的配置

这一点很重要,把Qt配置到系统的环境变量上才能进行打包处理。

点击系统变量PATH编辑。 

然后新建,把这个路径添加进来,然后保存就行了:

 2.打包

再然后就是点开你的Qt Creator选择Release,再去构建

构建好了之后,点开你的文件夹所在的位置,这里release就会看到有一个.exe文件

这时候双击这个.exe文件,这个UI界面就会出现,这时候你就会想这不就完成了吗?直接把这个文件夹压缩发过去,别人就可以用了呀。想屁吃呢?这里是需要依赖Qt环境才能运行的,你这里连Qt环境依赖的动态库和静态库都没有,发过去人家怎么可能打开呢? 

好了,这里正式开始讲这么去打包。

随便找个地方创建一个文件夹,然后把上面那个.exe文件复制粘贴进去。

下一步,在这个目录下打开终端,然后输入下面这个指令回车。

//windeployqt 文件名字.exewindeployqt Qdialog.exe  

说明:

windeployqt 是 Qt 提供的一个工具,用于自动收集并复制运行 Qt 应用程序所需的动态链接库(.dll 文件)及其他资源(如插件、QML 模块等)到可执行文件所在的目录。这样你就可以将应用程序和这些依赖项一起打包,确保在没有 Qt 环境的其他机器上也能运行。

主要功能:

  1. 自动收集依赖项windeployqt 会分析你的 Qt 应用程序,确定它所依赖的 Qt 库文件(如 Qt6Core.dll, Qt6Widgets.dll),并将这些文件复制到应用程序的目录。

  2. 处理插件和QML模块: 如果你的应用程序使用了 Qt 的插件(如平台插件 qwindows.dll 或图形驱动插件等),windeployqt 也会将这些插件一并打包。对于使用 QML 的应用程序,它也会自动收集必要的 QML 模块。

  3. 处理资源文件: 如果你的应用程序包含了 Qt 的资源文件(如图标、翻译文件等),它也会确保这些资源正确包含在最终的应用程序中。

这个时候你再打开这个目录发现就会多了好多文件,现在这个项目所需的依赖环境基本上放到这个文件夹了,你现在实际上可以去压缩发给别人了,别人即使没有Qt环境,也只需要双击那个.exe文件就可以直接使用了。不过这样子我感觉还不够完美,如果你做的是一个大型的Qt项目的话这样子就可以了,但是Qt基本上都是些小型的上位机比较多,所以啊我们还可以再继续完善一下,把整个文件夹变成一个可执行的.exe文件不是更加好嘛。请接着往下看。

3.打包整合为一个.exe文件

 这里需要用到这个Enigma Virtual Box软件,下载可以参考下面这个博客。

Enigma Virtual Box用法 exe封包工具介绍-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/ffffffeiyu/article/details/137087625?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522078B2AA5-F136-4D93-BEDB-299AE2D57C2E%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=078B2AA5-F136-4D93-BEDB-299AE2D57C2E&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-137087625-null-null.142%5Ev100%5Epc_search_result_base8&utm_term=Enigma%20Virtual%20Box&spm=1018.2226.3001.4187下载好了之后打开,这里把那个.exe文件放进去

然后点击这里:

 然后选择你这个.exe文件所在的目录。

 点击确定。

 搞定了,现在点击执行封包就行了。

 出现下面就是已经OK了。

 然后打开这个目录,这里就会有一个大小比较大boxed.exe文件,这个文件就是把所有需要的依赖全部整合生成的可执行文件,,相较于前面你只需要把这个文件发给别人,别人就可以直接执行了,方便多了。

4.生成安装包

到这里,你或许还感觉差了点意思,当然你会想还可以进一步去封装吗?严格的来说,我们已经做了一个软件了,那必须得给它整个安装包呀!说干就干。

下载Inno Setup 6(可以参考Qt程序的发布和打包 | 爱编程的大丙)

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

第一步,创建一个带向导的脚本文件。

直接 Next,不要创建空的脚本文件 

这里选择(Custom)即用户可自定义安装目录,这里我选D:/

 这里选择.exe文件,然后下面点Add folder 这里选择这个.exe文件所在的目录,道理跟上面整合是一样的,也就是获取到这个项目的环境依赖项。

 这里不需要勾选,然后点击下一步。

许可文件,文件中的内容会显示到安装向导的相关窗口中,可以选择不指定,直接跳过。我这里就直接跳过了。

这里选择安装语言,别看了,没有中文,老实选English下一步。 

 那个我这里是没有图标的,你们有图标加上去也不错。还有就是那个密码,也就是别人先要使用你这个安装包去安装你的软件的时候需要输入的密码(我感觉没什么必要,又不是私密软件)

然后一直点击下一步就行了。

直到这里,找到你上面选择的那个安装包文件夹去放你这个.iss文件,然后保存。

 现在打开,就是这样子的了,大功告成。

相关文章:

Qt开发——Qt项目打包、整合以及生成安装包保姆级教程(Windows系统)

目录 Windows下打包Qt项目 1.Qt系统环境变量的配置 2.打包 3.打包整合为一个.exe文件 4.生成安装包 做完了一个Qt项目之后,要干嘛呢,很显然要打包给别人,让别人也能使用这个软件,本期我们就来学习Qt打包,本期内容分…...

大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

【Java后端】之 ThreadLocal 详解

想象一下,你有一个工具箱,里面放着各种工具。在多人共用这个工具箱的时候,很容易出现混乱,比如有人拿走了你的锤子,或者你找不到合适的螺丝刀。为了避免这种情况,最好的办法就是每个人都有自己独立的工具箱…...

2.链表(代码随想录——python版本)

2.链表(代码随想录——python版本) 链表的概念: 链表是由指针串联在一起的线性结构,一个节点(node)由两部分组成: 数据域——用来存储数据;指针域——用来指向下一个节点&#xf…...

6个解决“由于找不到vcruntime140_1.dll无法继续执行代码”问题的方法

vcruntime140_1.dll丢失的问题在Windows操作系统中相对常见,它通常与Microsoft Visual C Redistributable有关。本文将详细解读vcruntime140_1.dll丢失的原因、解决方法以及预防措施,帮助用户更好地应对这一问题。 一,vcruntime140_1.dll文件…...

常用数据库获取表,视图,列,索引信息

一、分页获取数据库用户的所有表 (1)、Oracle,OceanBase(Oracle内核版),DM 使用ALL_TABLES,需要添加当前用户作为查询条件 select a3.* from (select a2.* from (select a1.*, rownum rn1 from ( select t1.table_name, t2.comments fro…...

架构设计笔记-16-嵌入式系统架构设计理论与实践

目录 知识要点 嵌入式微处理器 存储器(memory) 内(外)总线逻辑 嵌入式操作系统(Embedded Operating System,EOS) 通用中间件 嵌入式中间件的一般架构 典型嵌入式中间件系统 案例分析 1…...

SpringSecurity使用介绍

1、SpringSecurity 1.1 SpringSecurity简介 Spring Security是基于Spring的安全框架,提供了包含认证和授权的落地方案;Spring Security底层充分利用了Spring IOC和AOP功能,为企业应用系统提供了声明式安全访问控制解决方案;SpringSecurity可…...

# Js 回调函数

Js 回调函数 文章目录 Js 回调函数回调函数的定义和使用回调函数的常见用途异步操作事件处理 回调函数的优点和缺点优点缺点 回调地狱解决回调地狱的方法使用 Promise使用 async/await 应用函数式编程中的回调函数高阶函数函数柯里化 异步编程中的回调函数回调函数的错误处理传…...

COOLSHELL文章:从Code Review 谈如何做技术【阅读笔记】

从Code Review 谈如何做技术原文链接:https://coolshell.cn/articles/11432.html#google_vignette 工程师需要有责任心和修养,不是做出来就了事,而是要做漂亮。 这也是山寨和工业的区别,只以做出来为标准是劳动密集型的装配生产线…...

3.1.1 ReactOS系统中二叉树创建一个MEMORY_AREA节点

二叉树中创建一个MEMORY_AREA节点: 二叉树中创建一个MEMORY_AREA节点: MmCreateMemoryArea() 参数AddressSpace是MADDRESS SPACE结构指针,所指向的数据结构代表着一个进程的用 户空间。 参数BaseAddress是个指针,用来给定和返回内…...

三、Linux 安装全攻略

Linux 安装全攻略 在当今的科技时代,Linux 操作系统以其稳定性、安全性和高度的可定制性而备受青睐。本文将详细介绍 Linux 的安装过程,包括关键步骤和下载资源获取方式,帮助你顺利踏上 Linux 之旅。 一、为什么选择 Linux Linux 有许多优…...

Ansible自动化工具

一、Ansible概述 1.1 什么是Ansible Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件(剧本,Playbooks),轻松管理和配置多个服务器。Ansible 的特点是无…...

Flutter Container组件

Over the past few years, I’ve been fortunate to collaborate with interior designers, and there’s a distinct flair to their approach to crafting captivating interiors. It’s not just about arranging furniture randomly; they meticulously plan layouts, sele…...

IPv6 DNS简介

IPv6网络中的每台主机都是由IPv6地址来标识的,用户只有获得待访问主机的IPv6地址,才能够成功实现访问操作。对于用户来讲,记住主机的IPv6地址是相当困难的,因此设计了一种字符串形式的主机命名机制,这就是域名系统。用…...

【Python-AI篇】数据结构和算法

1. 算法概念 1.1 什么是数据结构 存储,组织数据的方式 1.2 什么是算法 实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c&a…...

VideoCLIP-XL:推进视频CLIP模型对长描述的理解

摘要 对比语言-图像预训练(CLIP)已被广泛研究并应用于众多领域。然而,预训练过程中对简短摘要文本的重视阻碍了CLIP理解长描述的能力。在视频方面,这个问题尤为严重,因为视频通常包含大量详细内容。在本文中&#xff…...

【vue】vue-router_ vue3路由管理器

代码获取 vue-router_ vue3路由管理器 ⼀、基本介绍 1. 单⻚应⽤程序介绍 1.1 概念 单⻚应⽤程序:SPA(Single Page Application)是指所有的功能都在⼀个HTML⻚⾯上实现 1.2 具体⽰例 单⻚应⽤⽹站: ⽹易云⾳乐 https://music.163.com/ 多⻚应⽤⽹…...

昇思MindSpore进阶教程--Diffusion扩散模型(上)

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文 关于扩散模型(Diffusi…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则&#xf…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

前端调试HTTP状态码

1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上

一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...

【技巧】dify前端源代码修改第一弹-增加tab页

回到目录 【技巧】dify前端源代码修改第一弹-增加tab页 尝试修改dify的前端源代码,在知识库增加一个tab页"HELLO WORLD",完成后的效果如下 [gif01] 1. 前端代码进入调试模式 参考 【部署】win10的wsl环境下启动dify的web前端服务 启动调试…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...