Qt程序打包成单个exe文件
文章目录
- 0. 准备工作
- 1. 使用 `windeployqt` 提取必要的动态链接库和资源文件
- 1.1 操作步骤
- 1.2 补充
- 2. 使用 `Enigma Virtual Box`将文件夹打包成单个exe
- 2.1 操作步骤
0. 准备工作
Qt程序打包用到的工具有:
windeployqt
:安装Qt时自带Enigma Virtual Box
下载地址 :免费软件
1. 使用 windeployqt
提取必要的动态链接库和资源文件
★说明: 本文仅以笔者自己的Qt程序为例进行介绍,具体项目请作相应的修改。
1.1 操作步骤
-
步骤1. 新建文件夹,命名为
iap
-
步骤2. 拷贝这执行文件
从Qt工程中的release文件夹中,将可执行文件拷贝到步骤1中新建的文件夹中
-
步骤3. 打开Qt终端
打开对应的Qt终端,本例中使用MinGW左编译器,因此打开Qt6.5.2(MinGW 11.2.0 64-bit)
在终端中进入到步骤1中创建好的文件夹 -
运行 windeployqt
指令如下
windeployqt appstm32iap_desktop.exe --qmldir D:\src\qt_ws\stm32iap_desktop\build-stm32iap_desktop-Desktop_Qt_6_5_2_MinGW_64_bit-Release
其中使用 --qmldir
指定了QML-Imports
的搜索路径,本例中该路径为工程中release的文件夹。
1.2 补充
补充1:
在其他的博客中仅使用windeployqt appstm32iap_desktop.exe
即可完成。但在实际操作的过程中,打包完的exe无法运行(双击无反应),加入 --qmldir
后问题解决。再此作为参考。
补充2
windeployqt
具有的功能还有很多,一下列出--hekp-all
的信息。
(base) PS C:\Users\HY\Desktop\iap> windeployqt --help-all
Please specify the binary or folder.Usage: C:\Users\HY\anaconda3\Library\bin\windeployqt.exe [options] [files]
Qt Deploy Tool 5.15.2The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:windeployqt <path-to-app-binary>
If ICU, ANGLE, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>Options:-?, -h, --help Displays help on commandline options.--help-all Displays help including Qt specific options.-v, --version Displays version information.--dir <directory> Use directory instead of binary directory.--libdir <path> Copy libraries to path.--plugindir <path> Copy plugins to path.--debug Assume debug binaries.--release Assume release binaries.--pdb Deploy .pdb files (MSVC).--force Force updating files.--dry-run Simulation mode. Behave normally, but do notcopy/update any files.--no-patchqt Do not patch the Qt5Core library.--ignore-library-errors Ignore errors when libraries cannot be found.--no-plugins Skip plugin deployment.--no-libraries Skip library deployment.--qmldir <directory> Scan for QML-imports starting from directory.--qmlimport <directory> Add the given path to the QML module searchlocations.--no-quick-import Skip deployment of Qt Quick imports.--translations <languages> A comma-separated list of languages to deploy(de,fi).--no-translations Skip deployment of translations.--no-system-d3d-compiler Skip deployment of the system D3D compiler.--compiler-runtime Deploy compiler runtime (Desktop only).--no-virtualkeyboard Disable deployment of the Virtual Keyboard.--no-compiler-runtime Do not deploy compiler runtime (Desktop only).--webkit2 Deployment of WebKit2 (web process).--no-webkit2 Skip deployment of WebKit2.--json Print to stdout in JSON format.--angle Force deployment of ANGLE.--no-angle Disable deployment of ANGLE.--no-opengl-sw Do not deploy the software rasterizer library.--list <option> Print only the names of the files copied.Available options:source: absolute path of the source filestarget: absolute path of the target filesrelative: paths of the target files, relativeto the target directorymapping: outputs the source and the relativetarget, suitable for use within anAppx mapping file--verbose <level> Verbose level (0-2).Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents enginio
gamepad gui qthelp multimedia multimediawidgets multimediaquick network nfc
opengl positioning printsupport qml qmltooling quick quickparticles quickwidgets
script scripttools sensors serialport sql svg test webkit webkitwidgets
websockets widgets winextras xml xmlpatterns webenginecore webengine
webenginewidgets 3dcore 3drenderer 3dquick 3dquickrenderer 3dinput 3danimation
3dextras geoservices webchannel texttospeech serialbus webviewArguments:[files] Binaries or directory containing the binary.
补充3
在windeployqt``可以加入--no-(xml)
选项,以减少打包后的大小。本例中加入前为123MB,加入后减为57MB。最终的命令如下。
D:\Qt\6.5.2\mingw_64\bin\windeployqt.exe ^appstm32iap_desktop.exe --qmldir D:\src\qt_ws\stm32iap_desktop\build-stm32iap_desktop-Desktop_Qt_6_5_2_MinGW_64_bit-Release ^
--no-opengl-sw ^
--no-translations ^
--no-system-d3d-compiler ^
--no-3danimation ^
--no-3dcore ^
--no-3dextras ^
--no-3dinput ^
--no-3dlogic ^
--no-3dquick ^
--no-3dquickanimation ^
--no-3dquickextras ^
--no-3dquickinput ^
--no-3dquickrender ^
--no-3dquickscene2d ^
--no-3drender ^
--no-quick3d ^
--no-multimedia ^
--no-svg ^
--no-svgwidgets ^
--no-quick3d ^
--no-quick3dassetimport ^
--no-quick3dassetutils ^
--no-quick3deffects ^
--no-quick3dhelpers ^
--no-quick3dhelpersimpl ^
--no-quick3diblbaker ^
--no-quick3dparticleeffects ^
--no-quick3dparticles ^
--no-quick3dphysics ^
--no-quick3dphysicshelpers ^
--no-quick3druntimerender ^
--no-quick3dutils ^
--no-qmlintegration ^
--no-qmllocalstorage ^
--no-qmlxmllistmodel ^
--no-virtualkeyboard ^
--no-sql ^
--no-statemachine ^
--no-statemachineqml ^
--no-concurrent ^
--no-quicktimeline ^
--no-quicktest
可将上面指令保存到.bat
的文件中,在Qt终端中运行。
2. 使用 Enigma Virtual Box
将文件夹打包成单个exe
上述操作后,程序虽然被提取出工程文件夹,但依然需要进入文件夹,双击可执行程序运行。该部分将上述创建的文件夹整体打包成可执行的exe文件。步骤如下。
2.1 操作步骤
- 步骤1:安装
Enigma Virtual Box
,从官方网站进行下载,并安装(下载地址 )。 - 步骤2:选择输入的exe文件,即上述新建文件夹中的可执行文件
- 步骤3:选择输出的文件名。默认状态下与输入exe文件同目录,可以进行修改
- 步骤4:添加程序运行的配套文件。
在步骤3中选择上述新建文件夹,点击确定和OK完成添加。
最终配置结果如下,点击Process
即可生成。
结果展示
相关文章:

Qt程序打包成单个exe文件
文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有: windeployqt :安装Qt时自带Enigma Virtual Box 下…...

【机器学习】GANs网络在图像和视频技术中的应用前景
📝个人主页:哈__ 期待您的关注 目录 1. 🔥引言 背景介绍 研究意义 2. 🎈GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. 🤖GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…...

MFC 使用sapi文字转换为语音
文章目录 添加头文件声明变量 添加头文件 声明变量 pSpVoice NULL; //默认构造函数中初始化为空 bool CChKBarSCCodeApp::InitSpVoice() {HRESULT hr ::CoInitialize(NULL); // COM初始化if (!SUCCEEDED(hr)){AfxMessageBox(_T("声音环境初始化失败!…...

(Git)多人协作1
文章目录 前言总结 前言 目标:master分支下file.txt文件新增“aaa”,“bbb” 实现:开发者1新增“aaa”,开发者2新增“bbb” 条件:在同一个分支下协作完成 实际开发过程中,每个用户都与属于自己的码云账户,如果想要进…...

MySQL-分组函数
041-分组函数 重点:所有的分组函数都是自动忽略NULL的 分组函数的执行原则:先分组,然后对每一组数据执行分组函数。如果没有分组语句group by的话,整张表的数据自成一组。 分组函数包括五个: max:最大值mi…...

【C语言】联合(共用体)
目录 一、什么是联合体 二、联合类型的声明 三、联合变量的创建 四、联合的特点 五、联合体大小的计算 六、联合的应用(判断大小端) 七、联合体的优缺点 7.1 优点 7.2 缺点 一、什么是联合体 联合也是一种特殊的自定义类型。由多个不同类型的数…...

【博客715】如何从victorimametrics集群中下线vmstorage节点
How to Decommission a vmstorage Node from a VictoriaMetrics Cluster 我们需要从VictoriaMetrics 集群中优雅地移除一个 vmstorage 节点。每个 vmstorage 节点都包含自己的数据部分,从集群中移除 vmstorage 节点会导致图表出现空白(因为复制超出了范…...
Redis缓存技术详解与实战
Redis缓存技术详解与实战 Redis作为一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息代理。在现代高并发、大数据量处理的系统中,Redis作为缓存层的应用越来越广泛。本文将详细讲解Redis在查询、添加缓存、更新缓存、缓存预热、缓存穿透、…...

业务架构的位置及关系
背景 我们已经了解了业务架构的核心元素组成,以及各个扩展元素,同时对各个元素的关系协同也有了一些了解,那么接下来,我们进一步在宏观层面来看业务架构与其他架构的关系。 企业架构 企业架构有多种理解,也有多种叫…...

CMS与AI的融合:构建万能表单小程序系统
引言: 随着人工智能技术的飞速发展,MyCMS作为一款功能强大的内容管理系统,通过集成AI技术,进一步拓展了其应用范围和智能化水平。本文将探讨如何利用MyCMS结合AI技术,构建一个能够将用户提交的万能表单数据转化为智能提…...

机器学习常见知识点 2:决策树
文章目录 决策树算法1、决策树树状图2、选择最优决策条件3、决策树算法过程→白话决策树原理决策树构建的基本步骤常见的决策树算法决策树的优缺点 【五分钟机器学习】可视化的决策过程:决策树 Decision Tree 关键词记忆: 纯度、选择最优特征分裂、熵、基…...

海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)
0x01 产品简介 海洋CMS是一套专为不同需求的站长而设计的内容管理系统,灵活、方便、人性化设计、简单易用是最大的特色,可快速建立一个海量内容的专业网站。海洋CMS基于PHP+MySql技术开发,完全开源免费 、无任何加密代码。 0x02 漏洞概述 海洋CMS admin_notify.php 接口处…...
Spring、Spring MVC、MyBatis和Spring Boot对比
在对比Spring、Spring MVC、MyBatis和Spring Boot时,我们可以从以下几个方面进行详细的分析: Spring框架: 作用:Spring是一个轻量级的IoC(控制反转)和AOP(面向切面编程)容器&#…...

【Linux高级IO】select、poll、epoll
【Linux高级IO】select、poll、epoll toc 作者:爱写代码的刚子 时间:2024.6.5 前言:本篇博客将会介绍面试重点考察的select、poll、epoll IO: input && Output read && write 应用层read&&write的时候,…...

Etcd Raft架构设计和源码剖析2:数据流
Etcd Raft架构设计和源码剖析2:数据流 | Go语言充电站 前言 之前看到一幅描述etcd raft的流程图,感觉非常直观,但和自己看源码的又有些不同,所以自己模仿着画了一下,再介绍一下。 下图从左到右依次分为4个部分&…...

深入理解Qt多线程编程(QThreadPool)
多线程编程在现代软件开发中变得越来越重要,它能够提高应用程序的响应速度和处理性能。在Qt框架中,QThreadPool作为线程池管理工具,被频繁的使用。 目录 概述 接口介绍 底层原理解析 使用方法 概述 QThreadPool是Qt提供的一个线程池实现&a…...

Prisma数据库ORM框架学习
初始化项目 中文网站 点击快速开始,点击创建sql项目,后面一步一步往后走 这个博主也挺全的,推荐下 可以看这个页面初始化项目跟我下面是一样的,这里用得是ts,我下面是js,不需要额外的配置了 1.vscode打开一个空文件夹 2.npm init -y 初始化package.json 3.安装相关依赖 …...

Flutter-使用MethodChannel 实现与iOS交互
前言 使用 MethodChannel 在 Flutter 与原生 Android 和 iOS 之间进行通信,可以让你在 Flutter 应用中调用设备的原生功能。 基础概念 MethodChannel:Flutter 提供的通信机制,允许消息以方法调用的形式在 Flutter 与原生代码之间传递。方法…...

【星海随笔】云解决方案学习日志篇(一) ELK,kibana,Logstash安装
心路历程 本来想最近再研究研究DPDK的。但是自己做一个东西很多时候没有回报。因为自己的低学历问题,类似工作的面试都没有。所以很多东西学了很快就忘了,没有地方可以用。 今天看到了一个大佬,除了发型外,很多想法还是很共鸣的。 Shay Banon 决定开始跟…...
【leetcode】hot100 哈希表
1. 两数之和 1.1 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...