文章目录
- [🧩 一、Qt MQTT 模块介绍](#🧩 一、Qt MQTT 模块介绍)
- [🚀 二、下载源码的两种方式](#🚀 二、下载源码的两种方式)
-
- [✅ 方法 1:使用 Git 克隆(推荐)](#✅ 方法 1:使用 Git 克隆(推荐))
- [✅ 方法 2:直接下载 ZIP 源码包](#✅ 方法 2:直接下载 ZIP 源码包)
- [🏗️ 三、编译步骤(Windows 示例)](#🏗️ 三、编译步骤(Windows 示例))
-
- [① 打开 Qt 的命令行环境](#① 打开 Qt 的命令行环境)
- [② 进入源码目录](#② 进入源码目录)
- [③ 生成构建文件](#③ 生成构建文件)
- [④ 编译并安装模块](#④ 编译并安装模块)
- [⑤ 编译完成后,检查目录:](#⑤ 编译完成后,检查目录:)
- [🧠 四、在项目中使用](#🧠 四、在项目中使用)
- [🧰 五、常见问题](#🧰 五、常见问题)
-
- qmake构建失败
-
- [为什么 Qt 的构建需要依赖 Perl?](#为什么 Qt 的构建需要依赖 Perl?)
- [为什么 Windows 上必须安装 Strawberry Perl?](#为什么 Windows 上必须安装 Strawberry Perl?)
- [Strawberry Perl 安装指南](#Strawberry Perl 安装指南)
因为需要使用4G通信,要安装mqtt组件,开始重新安装了一下qt,发现Qt 5.12.12 开源版安装器中默认是没有 "Qt for Automation / Qt MQTT" 选项的。因为 Qt MQTT 属于 Qt for Automation 套件,而那部分在 Qt 5.12 时代是商业授权模块,不会出现在普通开源安装器中。
但是Qt MQTT 模块(开源版)可以单独下载并编译 ,只要 Qt 环境已经安装好(比如 Qt 5.12.12 + MSVC 或 MinGW),就能手动添加它。下面介绍 如何下载 + 编译 + 集成 Qt MQTT 模块。
🧩 一、Qt MQTT 模块介绍
模块名:qtmqtt
源码仓库:https://code.qt.io/cgit/qt/qtmqtt.git/
许可证:LGPLv3 / GPLv3(可用于开源项目)
适用版本:Qt 5.9 及以上(包括 5.12.12)
🚀 二、下载源码的两种方式
✅ 方法 1:使用 Git 克隆(推荐)
打开 Qt 的命令提示符(如 "Qt 5.12.12 for Desktop (MSVC 2017 64-bit)"):
bash
cd D:\Qt\5.12.12\Src # 或任意想放源码的位置
git clone https://code.qt.io/qt/qtmqtt.git
cd qtmqtt
git checkout 5.12
⚠️ 如果没有安装 Git,可在 https://git-scm.com/downloads 下载。
✅ 方法 2:直接下载 ZIP 源码包
无需 Git,访问:
👉 https://code.qt.io/cgit/qt/qtmqtt.git/
点击右上角 "Snapshot",选择:
qtmqtt-5.12.zip
下载后解压,比如:
D:\Qt\qtmqtt-5.12\
🏗️ 三、编译步骤(Windows 示例)
① 打开 Qt 的命令行环境
找到:
开始菜单 → Qt → Qt 5.12.12 → (MSVC 2017 64-bit) → Qt 5.12.12 for Desktop
(这样环境变量已自动配置好 qmake、nmake)

② 进入源码目录
bash
cd D:\Qt\qtmqtt-5.12\
③ 生成构建文件
bash
qmake
如果你安装多个 Qt 版本,可指定 qmake 路径,例如:
bash"D:\Qt\5.12.12\msvc2017_64\bin\qmake.exe" .
④ 编译并安装模块
MSVC:
bash
nmake
nmake install
MinGW:
bash
mingw32-make
mingw32-make install
⑤ 编译完成后,检查目录:
D:\Qt\5.12.12\msvc2017_64\include\QtMqtt\
D:\Qt\5.12.12\msvc2017_64\lib\Qt5Mqtt.lib
D:\Qt\5.12.12\msvc2017_64\bin\Qt5Mqtt.dll
若这些文件存在,就表示编译成功 ✅
🧠 四、在项目中使用
在你的 .pro 文件添加:
pro
QT += mqtt
然后即可使用:
cpp
#include <QMqttClient>
QMqttClient client;
client.setHostname("broker.hivemq.com");
client.setPort(1883);
client.connectToHost();
🧰 五、常见问题
| 问题 | 解决办法 |
|---|---|
Project ERROR: Unknown module(s) in QT: mqtt |
没有执行 nmake install 或路径不对 |
qmake 找到错误版本 Qt |
指定 Qt 5.12.12 的 qmake 路径 |
| 缺少 OpenSSL 库 | 安装 OpenSSL 1.1.x 并加入 PATH |
qmake构建失败
因为Qt 构建系统(qmake)依赖 Perl------深入理解 qmake 与 Strawberry Perl
在使用 Qt5(尤其是 Qt 5.12 ~ Qt 5.15)进行 Windows C++ 开发时,很多开发者会遇到一个容易被忽略的问题:qmake 在某些操作中依赖 Perl,而 Windows 默认没有 Perl 环境。
为什么 Qt 的构建需要依赖 Perl?
qmake 自身是 C++ 写的,不需要 Perl。但是 Qt 的部分构建工具是 Perl 脚本实现的。
Qt 构建过程中涉及 Perl 的环节
Qt 5 内部有一些模块和工具采用 Perl 实现,例如:
🔹 1. Qt WebKit / Qt WebEngine 构建工具
QtWebKit 的早期构建工具使用大量 Perl 脚本,如:
- 扫描 DOM
- 生成绑定代码
- WebKit 源码自动生成器
🔹 2. Qt 的自动代码生成器(部分)
虽然 moc/uic/rcc 是 C++ 程序,但某些 Qt 扩展模块(如 xmlpatterns)会依赖 Perl 脚本生成中间文件。
🔹 3. Qt Installer Framework
Qt IFW 制作安装包也需要 Perl。
🔹 4. Qt Qt5 configure & 构建流程(特别是源码编译)
如果你使用的是:
qt-everywhere-src-5.x.x
在 Windows 上编译 Qt 需要 Perl 来执行:
- configure 生成逻辑
- ICU/WebKit 代码生成
- 处理一些脚本自动化任务
换句话说:
qmake 本身不需要 Perl,但 Qt 的构建和部分模块依赖 Perl
为什么 Windows 上必须安装 Strawberry Perl?
Linux 和 macOS 系统内置 Perl,因此 Qt 在这些平台可以正常构建。
但 Windows 原生没有 Perl。
因此 Qt 官方推荐使用:
Strawberry Perl ------ Windows 上最标准、最兼容的 Perl 版本
原因包括:
- 完全开源
- 支持 GCC/MSVC 工具链
- 带 dmake/nmake 等构建工具
- 兼容 Qt 的 Perl 脚本
Qt 官方文档明确写明:
Building Qt from source on Windows requires a Perl installation (Strawberry Perl is recommended).
Strawberry Perl 安装指南
下载地址(官方)
https://strawberryperl.com
选择:
- 64-bit
- 最新版 Perl
例如:
strawberry-perl-5.32.1.1-64bit.msi
安装步骤
一路 Next 即可,记得勾选:
✔ Add to PATH
✔ Enable tools
安装后命令行可以执行:
perl -v
即可开始构建 Qt。
如何验证 Qt 是否检测到 Perl?
打开 Qt 环境控制台(Qt Command Prompt):
perl -v
qmake --version
如果能够正常执行,说明 Perl 生效。
常见问题排查
1.qmake 报错找不到 Perl
错误信息一般为:
Perl is required to build WebKit
✔ 解决:安装 Strawberry Perl 后重新执行 qmake 或 configure。
2.qmake + MSVC 无法执行 Perl 脚本
可能因为 PATH 顺序问题。
解决方法:
在系统环境变量中将:
C:\Strawberry\perl\bin
移动到靠前位置。
总结
| 内容 | 说明 |
|---|---|
| qmake 是 Qt 的构建系统 | 解析 .pro 文件,生成 Makefile/VS 工程 |
| qmake 本身不需要 Perl | 但 Qt 的构建工具链部分依赖 Perl |
| Windows 需安装 Strawberry Perl | Linux/macOS 则无需 |
| Perl 用于 Qt WebKit、自动生成器、源码构建 | 特别是在编译 Qt 源码时必需 |
因此,在 Windows 上编译 Qt 或使用 Qt 的部分模块时:
必须安装 Strawberry Perl 才能保证 Qt 构建系统完整运行。