Qt6 MinGW+CMake 完整发布教程:从零新建项目 → 打包独立 EXE(发给任意 Windows 电脑直接运行)
2026/6/12 1:33:00 网站建设 项目流程

文章前言

作为 Qt 新手写完代码后,本地能正常运行,把生成的 exe 拷贝到其他电脑就报「找不到 Qtxx.dll」;还有人打包工具选错弹出广告、Ninja 编译报错、命令行找不到windeployqt等一系列问题。本文基于Qt 6.5.3 + MinGW64 + CMake记录完整流程,包含代码编写、编译、依赖部署、单文件封装,附带所有踩坑解决方案,适配工控上位机、固件差分升级工具这类 Windows 桌面 Qt 开发场景,新手可一键照搬操作。

开发环境

  • Qt 版本:Qt 6.5.3 MinGW 64-bit
  • IDE:Qt Creator
  • 构建工具:CMake(规避 qmake 旧方案)
  • 打包工具:Enigma Virtual Box(免费无广告、商用无限制)
  • 系统:Windows 10/11

一、新建 Qt Widgets CMake 项目

1. 新建工程模板

  1. Qt Creator 点击「新建项目或文件」,分类选择Application (Qt)Qt Widgets Application(传统桌面控件,工控工具首选)
  2. 项目名称必须纯英文、无空格、无中文,存放路径全程英文(MinGW+CMake 对中文路径兼容性极差)
  3. 构建套件选择Desktop Qt 6.5.3 MinGW 64-bit,一路点击下一步,完成项目创建。

2. 项目文件结构说明

自动生成文件:

  • CMakeLists.txt:CMake 构建配置文件(Qt6 核心配置文件)
  • main.cpp:程序入口
  • mainwindow.h/cpp/ui:主窗口代码 + 可视化 UI 设计文件

3. 编写测试示例代码(按钮窗口 Demo)

这里用极简纯代码示例测试,可直接替换main.cpp全部内容:

cpp

运行

#include <QApplication> #include <QWidget> #include <QVBoxLayout> #include <QPushButton> #include <QDebug> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget *window = new QWidget; window->resize(300, 150); QVBoxLayout *layout = new QVBoxLayout(window); QPushButton *button = new QPushButton("点击我"); layout->addWidget(button); // 信号槽绑定按钮点击事件 QObject::connect(button, &QPushButton::clicked, [](){ qDebug() << "按钮被点击,程序运行正常!"; }); window->show(); return app.exec(); }

4. 校验 CMakeLists 配置(Qt6 必做)

Qt6 CMake 必须手动声明依赖模块,完整可用配置:

cmake

cmake_minimum_required(VERSION 3.5) project(QTTest LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) # 引入Qt核心+Widgets桌面控件模块 find_package(Qt6 REQUIRED COMPONENTS Core Widgets) # 罗列所有源码、UI文件 qt_add_executable(QTTest main.cpp mainwindow.h mainwindow.cpp mainwindow.ui ) # 链接Qt库 target_link_libraries(QTTest PRIVATE Qt6::Core Qt6::Widgets)

二、编译 Release 正式版本(关键!Debug 版本无法外发)

1. 切换构建模式

Qt Creator 左下角构建下拉框,把默认Debug切换为Release

  • Debug:带调试信息、体积大、依赖调试库,仅本地开发调试,不能发给别人
  • Release:无调试冗余、体积精简,是最终发布版本

2. 清理旧缓存 + 重新构建

  1. 顶部菜单栏:构建清理所有项目
  2. 手动删除项目根目录下build整个文件夹(彻底清除 Ninja 残留缓存,规避编译报错)
  3. 点击锤子图标「构建全部项目」,底部无红色报错即编译成功。

3. 找到原生 EXE 文件

EXE 路径:项目目录/build/Desktop_Qt_6_5_3_MinGW_64_bit-Release/QTTest.exe⚠️ 此时直接单独拷贝这个 exe 到其他电脑,会提示缺失 dll,无法运行,必须部署依赖。

三、windeployqt 一键部署 Qt 运行依赖

1. 打开正确的 Qt 专属终端(高频踩坑点)

❌ 错误:系统 CMD、独立 TDM-GCC 终端,环境变量不全,提示windeployqt不是内部或外部命令✅ 正确操作:Windows 开始菜单找到Qt 6.5.3 MinGW 64-bit Command Prompt,该终端自动加载完整 Qt 环境。

2. 跳转 EXE 所在目录并执行部署命令

终端依次输入两行指令,每行回车执行:

cmd

cd /d D:\Desktop\xuexi\QTProject\QTTest\build\Desktop_Qt_6_5_3_MinGW_64_bit-Release windeployqt QTTest.exe

3. 部署完成标志

Release 文件夹内自动生成所有 Qt 依赖 dll、platformsstyles插件目录。此时整个 Release 文件夹直接压缩打包,发给任意 Windows 电脑解压后双击 exe 就能运行,无需额外安装 Qt。

四、进阶:封装为单个独立 EXE(无广告)

多文件夹发给客户不方便,用免费工具打包成单个 exe,注意区分两款极易混淆的同厂软件:

表格

工具用途授权注意事项
Enigma Virtual Box多文件打包单 EXE,仅虚拟挂载依赖永久免费、商用无限制无任何弹窗水印,本文推荐
Enigma Protector程序加密、授权加壳工具付费软件,试用版强制弹开屏广告❌ 绝对不要下载使用

1. 官方正版下载

官网下载页:Software Protection, Software Licensing, Software Virtualization仅下载Enigma Virtual Box(Freeware),不要勾选上方 Protector 付费工具。

2. EVB 打包详细步骤

  1. 打开 Enigma Virtual Box:
    • Enter input file name:选中部署好依赖的原始QTTest.exe
    • Enter output file name:自定义打包后单 exe 保存路径 + 文件名
  2. 点击Add Folder Recursively,选中整个 Release 文件夹,一键导入全部 dll、子目录;
  3. 可选勾选Compress files开启压缩,减小最终 exe 体积;
  4. 右下角点击Process,等待打包结束。

3. 最终成品

生成的单个 exe 文件,直接发给其他人,双击即可运行,无任何弹窗、无需解压、无需安装运行库。

五、全程高频踩坑解决方案(你实操遇到的全部问题汇总)

坑 1:ninja: build stopped: subcommand failed 编译失败

  1. 手动删除整个 build 构建文件夹,清理缓存;
  2. 套件管理里把 CMake 生成器从Ninja改成Unix Makefiles (MinGW make)
  3. 检查CMakeLists.txt是否添加了Qt6::Widgets模块依赖。

坑 2:windeployqt 不是内部或外部命令

不要用系统 CMD、TDM-GCC 独立终端,必须使用 Qt 安装自带的Qt 6.5.3 MinGW 64-bit Command Prompt终端执行命令。

坑 3:打包后启动弹出 Enigma 开屏广告

选错工具,使用了付费试用版Enigma Protector;删除带广告的 exe,换回免费Enigma Virtual Box重新打包。

坑 4:拷贝 exe 到其他电脑提示缺失 dll

只单独复制了 exe,没有用windeployqt部署依赖;要么完整发送整个 Release 文件夹,要么 EVB 打包成单文件。

坑 5:CMake 构建解析失败

项目路径、文件名包含中文、空格、特殊字符,MinGW+CMake 不兼容,必须全程英文路径。

六、流程完整复盘 & 项目适配建议

完整流程一句话总结

新建英文路径 CMake Widget 项目 → 编写代码 + 校验 CMake 配置 → 切换 Release 模式编译 → Qt 专属终端执行 windeployqt 部署依赖 → 文件夹可直接交付 / EVB 打包单 EXE 交付。

适配你的固件差分升级工具开发建议

  1. 正式差分工具依旧使用 Qt Widgets 拖拽 UI 开发,效率更高;
  2. 每次迭代新版本都走这套 Release 打包流程,交付给设备调试人员;
  3. 工控现场电脑普遍无 Qt 环境,优先打包单 EXE,拷贝即用,无需额外配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询