现在让我们设好番茄钟放一首好听的音乐开始学习吧 🌈 😋
前言
在刚学习编程的时候,我们总是会将自己做的一些小玩具迫不及待地分享给我们的朋友,但是在那时我们的还没程序打包的概念,经常做出来的程序,要么只能在 Visual Studio(特定的环境里面)中跑起来(第一个分享给是有的是一个简单的猜数字游戏,但是在室友的电脑上是中运行不起来,后看来才知道原来是mac电脑上不能直接运行.exe程序 )。
在刚知道qt的时候瞬间就觉得他非常的有趣,从而开始幻想自己有一天要做出一些让朋友对我竖起大拇指的项目 😏。终于前些时间,我制作的第一个较大项目完成了,今时不同往日现在我是时候来好好琢磨琢磨,怎么让朋友们也能玩到这个耗费我大量心血的玩具 😊
概述
本教程将详细介绍如何在Windows系统下将Qt应用程序打包成可独立运行的程序,并进一步制作成专业的安装包。整个流程分为三个主要步骤:环境准备 → 依赖打包 → 安装包制作。
💡 核心工具
一、前期准备
1.1 Qt环境变量配置
在使用windeployqt工具前,需要确保Qt相关路径已添加到系统环境变量中。
步骤:
- 找到自己的 QT安装路径

- 点开可能会有多个目录,这取决于你在下载Qt时的安装设置,具体选用哪个就要看你想要打包的Qt程序是使用什么构建的

比如我现在的这个项目是在MinGW上构建的,所以我就点进mingw

3. 点进mingw的目录找到bin,再点进去找到 windeployqt

在这里发现有两个, windeployqt 和 windeployqt6 具体选用哪个,是要看你下载的Qt版本,比如我下载的是Qt的6.7.3所以在打包的时候就是用 windeployqt6 之前的版本可以使用windeployqt

- 复制现在的文件路径将其添加到环境变量(其实也就是当前你进入的文件目录),现在我们需要将它添加到环境变量之中,让后续的操作更加的简便

可以直接在电脑下方的搜索框搜索 “环境”,点击进入,(也可以右键 此电脑 → 属性 → 高级系统设置 → 环境变量)

选择编辑环境变量

在 系统变量 中找到 Path,点击 编辑

配置环境变量

- 验证环境变量是否添加成功
win + R 输入cmd 输入 windeployqt 命令,显示这样的界面就说明环境变量起作用了

⚠️ 注意:如果使用MinGW编译,需要添加MinGW的bin路径;如果使用MSVC编译,需要安装对应版本的Visual Studio运行时。
1.2 生成Release版本
打包前必须使用Release模式编译程序,因为Release版本体积更小、运行效率更高。
Qt Creator操作:
- 在左下角构建模式选择 Release

- 重新运行项目,执行成功之后再到项目的构建目录就可以找到 release版本的执行文件
- 可以直接在 qt跳转到构建项目

b. 进入到 build目录找到 release文件夹

这样就可以找到 release版本的运行程序了

二、使用windeployqt打包依赖
2.1 准备独立文件夹
- 创建一个新的空文件夹,例如
D:MyApp_Package - 将Release模式生成的
.exe文件复制到该文件夹 - 如果程序使用了自定义DLL,也一并复制到该文件夹
比如我自己的程序就是用到了服务器的ip地址和端口和libmpv2库,所以这些运行需要的配置文件也要一并的复制进去


2.2 运行windeployqt工具
- 右键打开命令行窗口

2. 输入打包的工具的命令 (我这里使用的是 windployqt6, 如果不是使用的Qt6.xxx的版本构建的,具体的视情况而定)

这样我们就将自己的qt程序基本的打包好了,点击我们的执行程序文件可以正常的运行;
PS: 一定要注意将自己使用到的动静态库文件拷贝到自己创建的目录,否则无法运行!!
2.3 windeployqt常用参数
一般的情况下,直接使用按照上面的步骤做就行了,下面是一些 windeployqt 的拓展用法
# 基础用法
windeployqt MyApp.exe
# 仅复制核心依赖,减小体积
windeployqt --no-translations MyApp.exe
# 包含QML依赖(适用于Qt Quick项目)
windeployqt --qmldir <QML源码路径> MyApp.exe
# 指定Release模式
windeployqt --release MyApp.exe
# 显示详细输出
windeployqt --verbose 2 MyApp.exe
2.4 执行结果
命令执行成功后,文件夹中会自动生成:
- DLL文件:Qt核心库(如Qt5Core.dll、Qt5Gui.dll等)
- plugins文件夹:平台插件、图像格式支持等
- translations文件夹:多语言翻译文件(可删除以减小体积)
- 其他依赖文件
此时双击 .exe 文件应该可以正常运行。
🔍 排查运行错误
三、制作安装包
完成依赖打包后,可以使用安装包制作工具生成专业的安装程序。
3.1 选择打包工具
| 工具 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Inno Setup | 简单易用,脚本清晰,社区活跃 | 功能相对基础 | 中小型项目,快速打包 |
| NSIS | 功能强大,高度自定义 | 学习曲线陡峭 | 复杂安装需求 |
| Qt Installer Framework | Qt官方工具,深度集成 | 配置复杂 | 大型跨平台项目 |
本教程以Inno Setup为例(推荐新手使用)。
3.2 Inno Setup安装与配置
下载地址: https://jrsoftware.org/isdl.php

还是像安装其他的软件一眼个选择一个安装位置就可以了。
3.3 前置准备
将我们之前的所有依赖重新放在一个新的文件夹中(除了运行程序)

3.4 运行Inno Setup 创建脚本
- 打开软件

刚打开的时候会弹出这样的窗口注意一定要选择这个按钮!!
- 点击OK,接下来点击next,来到这个界面

这里的这只可以随意,这里我们没有公司和许可证,就可以直接不管他

3. 继续点击next来到这一步,这一步很重要,点击选中我们的执行程序,同时加入我们存放所有依赖的文件夹 ☺️

- 选中执行程序

- 选中依赖文件夹

- 剩下的步骤可以根据自己的需求自己设置,若没有什么特殊需求直接继续单击next
默认不支持中文,但是可以下载到中文的程序包,可以自行设置

5. 选择一个文件夹,来接受后续脚本运行生成的安装包

- 后面的没有特殊需要,就直接点击next,最后默认直接编译

7. 执行成功之后,就可以发现我们设置的路径下就出现了安装包,点击之后可以正常下载 🏆


四、高级技巧
4.1 单文件打包
如果希望生成单个exe文件(无需解压),可使用 Enigma Virtual Box:
- 下载安装 Enigma Virtual Box
- 将打包文件夹的所有内容虚拟化到exe中
- 生成的单文件体积较大,但无需依赖外部文件
4.2 静态编译
优点: 生成的exe无需任何DLL,体积最小
缺点: 需要重新编译Qt,非常耗时(数小时)
不推荐新手使用,商业项目需注意Qt许可协议。
4.3 依赖检查工具
使用 Dependency Walker 或 dumpbin 检查exe依赖:
# Visual Studio开发者命令提示符
dumpbin /dependents MyApp.exe
4.4 自动化打包脚本
创建批处理文件 package.bat:
@echo off
echo 开始打包Qt应用程序...
REM 设置路径
set QTDIR=C:Qt5.15.2mingw81_64
set BUILDDIR=build-MyApp-Desktop_Qt_5_15_2_MinGW_64_bit-Release
set PACKAGEDIR=D:MyApp_Package
REM 清理旧文件
if exist "%PACKAGEDIR%" rd /s /q "%PACKAGEDIR%"
mkdir "%PACKAGEDIR%"
REM 复制exe
copy "%BUILDDIR%releaseMyApp.exe" "%PACKAGEDIR%"
REM 打包依赖
cd /d "%PACKAGEDIR%"
"%QTDIR%binwindeployqt.exe" --release --no-translations MyApp.exe
echo 打包完成!
pause
五、常见问题
Q1: 提示找不到Qt5Core.dll
A: windeployqt未正确执行,检查Qt环境变量配置。
Q2: 程序在其他电脑无法运行
A: 目标电脑缺少MSVC运行库,在安装包中包含 vcredist_x64.exe 或使用MinGW编译。
Q3: 打包后程序体积过大
A:
- 使用
--no-translations参数移除翻译文件 - 删除不需要的plugins(如sql、multimedia等)
- 考虑使用Release模式和代码优化
Q4: QML项目打包后界面无法显示
A: 需要指定qmldir路径:
windeployqt --qmldir <项目QML源码路径> MyApp.exe
Q5: Inno Setup中文乱码
A: 确保 .iss 脚本文件编码为UTF-8 with BOM。
六、总结
完整的Qt应用程序打包流程:
- 配置Qt环境变量 → 确保windeployqt可用
- 生成Release版本 → 获取优化后的exe
- 创建独立文件夹 → 复制exe和自定义DLL
- 运行windeployqt → 自动收集Qt依赖
- 测试运行 → 确保无缺失DLL
- 使用Inno Setup → 制作专业安装包
- 测试安装 → 验证安装包功能
✅ 关键提示
通过本教程,你应该能够完成从Qt项目到Windows安装包的完整流程。根据项目复杂度,整个过程通常需要30分钟到2小时。

