怎么将Qt程序打包为安装包?

怎么将Qt程序打包为安装包?
https://open.spotify.com/playlist/6zCID88oNjNv9zx6puDHKj?si=2697caec55594412&nd=1&dlsi=1ac4dd1566274a75

现在让我们设好番茄钟放一首好听的音乐开始学习吧 🌈 😋


前言

在刚学习编程的时候,我们总是会将自己做的一些小玩具迫不及待地分享给我们的朋友,但是在那时我们的还没程序打包的概念,经常做出来的程序,要么只能在 Visual Studio(特定的环境里面)中跑起来(第一个分享给是有的是一个简单的猜数字游戏,但是在室友的电脑上是中运行不起来,后看来才知道原来是mac电脑上不能直接运行.exe程序 )。

在刚知道qt的时候瞬间就觉得他非常的有趣,从而开始幻想自己有一天要做出一些让朋友对我竖起大拇指的项目 😏。终于前些时间,我制作的第一个较大项目完成了,今时不同往日现在我是时候来好好琢磨琢磨,怎么让朋友们也能玩到这个耗费我大量心血的玩具 😊

概述

本教程将详细介绍如何在Windows系统下将Qt应用程序打包成可独立运行的程序,并进一步制作成专业的安装包。整个流程分为三个主要步骤:环境准备依赖打包安装包制作

💡 核心工具


一、前期准备

1.1 Qt环境变量配置

在使用windeployqt工具前,需要确保Qt相关路径已添加到系统环境变量中。

步骤:

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

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

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

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

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

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

选择编辑环境变量

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

配置环境变量

 

  1. 验证环境变量是否添加成功

win + R 输入cmd 输入 windeployqt 命令,显示这样的界面就说明环境变量起作用了

⚠️ 注意:如果使用MinGW编译,需要添加MinGW的bin路径;如果使用MSVC编译,需要安装对应版本的Visual Studio运行时。

1.2 生成Release版本

打包前必须使用Release模式编译程序,因为Release版本体积更小、运行效率更高。

Qt Creator操作:

  1. 在左下角构建模式选择 Release
  1. 重新运行项目,执行成功之后再到项目的构建目录就可以找到 release版本的执行文件
    1. 可以直接在 qt跳转到构建项目

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

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

 


二、使用windeployqt打包依赖

2.1 准备独立文件夹

  1. 创建一个新的空文件夹,例如 D:MyApp_Package
  2. 将Release模式生成的 .exe 文件复制到该文件夹
  3. 如果程序使用了自定义DLL,也一并复制到该文件夹

比如我自己的程序就是用到了服务器的ip地址和端口和libmpv2库,所以这些运行需要的配置文件也要一并的复制进去

2.2 运行windeployqt工具

  1. 右键打开命令行窗口

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 FrameworkQt官方工具,深度集成配置复杂大型跨平台项目

本教程以Inno Setup为例(推荐新手使用)。

3.2 Inno Setup安装与配置

下载地址: https://jrsoftware.org/isdl.php

还是像安装其他的软件一眼个选择一个安装位置就可以了。

3.3 前置准备

将我们之前的所有依赖重新放在一个新的文件夹中(除了运行程序)

3.4 运行Inno Setup 创建脚本

  1. 打开软件

刚打开的时候会弹出这样的窗口注意一定要选择这个按钮!!

  1. 点击OK,接下来点击next,来到这个界面

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

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

  • 选中执行程序
  • 选中依赖文件夹

 

 

  1. 剩下的步骤可以根据自己的需求自己设置,若没有什么特殊需求直接继续单击next

默认不支持中文,但是可以下载到中文的程序包,可以自行设置

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

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

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


四、高级技巧

4.1 单文件打包

如果希望生成单个exe文件(无需解压),可使用 Enigma Virtual Box

  1. 下载安装 Enigma Virtual Box
  2. 将打包文件夹的所有内容虚拟化到exe中
  3. 生成的单文件体积较大,但无需依赖外部文件

4.2 静态编译

优点: 生成的exe无需任何DLL,体积最小

缺点: 需要重新编译Qt,非常耗时(数小时)

不推荐新手使用,商业项目需注意Qt许可协议。

4.3 依赖检查工具

使用 Dependency Walkerdumpbin 检查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应用程序打包流程:

  1. 配置Qt环境变量 → 确保windeployqt可用
  2. 生成Release版本 → 获取优化后的exe
  3. 创建独立文件夹 → 复制exe和自定义DLL
  4. 运行windeployqt → 自动收集Qt依赖
  5. 测试运行 → 确保无缺失DLL
  6. 使用Inno Setup → 制作专业安装包
  7. 测试安装 → 验证安装包功能

关键提示

通过本教程,你应该能够完成从Qt项目到Windows安装包的完整流程。根据项目复杂度,整个过程通常需要30分钟到2小时。