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

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
    新建文件夹 iap

  • 步骤2. 拷贝这执行文件
    从Qt工程中的release文件夹中,将可执行文件拷贝到步骤1中新建的文件夹中
    拷贝执行文件

  • 步骤3. 打开Qt终端
    Qt终端
    打开对应的Qt终端,本例中使用MinGW左编译器,因此打开Qt6.5.2(MinGW 11.2.0 64-bit)
    Qt终端
    在终端中进入到步骤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:添加程序运行的配套文件。
    ebx操作步骤
    在步骤3中选择上述新建文件夹,点击确定和OK完成添加。
    ebx选择文件夹
    最终配置结果如下,点击Process即可生成。
    evb最终界面

结果展示
生成结果


相关文章:

Qt程序打包成单个exe文件

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

【机器学习】GANs网络在图像和视频技术中的应用前景

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. &#x1f525;引言 背景介绍 研究意义 2. &#x1f388;GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. &#x1f916;GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…...

MFC 使用sapi文字转换为语音

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

(Git)多人协作1

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

MySQL-分组函数

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

【C语言】联合(共用体)

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

【博客715】如何从victorimametrics集群中下线vmstorage节点

How to Decommission a vmstorage Node from a VictoriaMetrics Cluster 我们需要从VictoriaMetrics 集群中优雅地移除一个 vmstorage 节点。每个 vmstorage 节点都包含自己的数据部分&#xff0c;从集群中移除 vmstorage 节点会导致图表出现空白&#xff08;因为复制超出了范…...

Redis缓存技术详解与实战

Redis缓存技术详解与实战 Redis作为一个开源的内存数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息代理。在现代高并发、大数据量处理的系统中&#xff0c;Redis作为缓存层的应用越来越广泛。本文将详细讲解Redis在查询、添加缓存、更新缓存、缓存预热、缓存穿透、…...

业务架构的位置及关系

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

CMS与AI的融合:构建万能表单小程序系统

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

机器学习常见知识点 2:决策树

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

海洋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时&#xff0c;我们可以从以下几个方面进行详细的分析&#xff1a; Spring框架&#xff1a; 作用&#xff1a;Spring是一个轻量级的IoC&#xff08;控制反转&#xff09;和AOP&#xff08;面向切面编程&#xff09;容器&#…...

【Linux高级IO】select、poll、epoll

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

Etcd Raft架构设计和源码剖析2:数据流

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

深入理解Qt多线程编程(QThreadPool)

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

Prisma数据库ORM框架学习

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

Flutter-使用MethodChannel 实现与iOS交互

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

【星海随笔】云解决方案学习日志篇(一) ELK,kibana,Logstash安装

心路历程 本来想最近再研究研究DPDK的。但是自己做一个东西很多时候没有回报。因为自己的低学历问题&#xff0c;类似工作的面试都没有。所以很多东西学了很快就忘了&#xff0c;没有地方可以用。 今天看到了一个大佬,除了发型外,很多想法还是很共鸣的。 Shay Banon 决定开始跟…...

【leetcode】hot100 哈希表

1. 两数之和 1.1 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...