windows下Qt5自动编译配置QtMqtt环境(11)
文章目录
- @[toc]
- 1、概述
- 2、准备
- 1.1 下载源码
- 1.2 配置环境
- 1.3 解释原理
- 3、编译
- 4、验证
- 5、参考
- 6、视频
文章目录
- @[toc]
- 1、概述
- 2、准备
- 1.1 下载源码
- 1.2 配置环境
- 1.3 解释原理
- 3、编译
- 4、验证
- 5、参考
- 6、视频
| 更多精彩内容 |
|---|
| 👉内容导航 👈 |
| 👉Qt网络编程 👈 |
1、概述
Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配置;
网络所有的QtMqtt配置的文章都是编译完成手动复制,非常麻烦,对新手也非常不友好吗,容易漏了一些步骤;
本文中主要说明windows下如何自动编译配置QtMqtt,无需手动拷贝、生成帮助手册;
注意:
- 编译前需要安装
perl,如果没有perl则编译后生成的头文件都是带.h后缀的。- 工程里面需要有一个
.git文件夹,否则不会指向perl。- 如果不安装perl也可以编译,不过后续会出现部分报错,需要手动添加头文件。
- 只是Qt5需要安装perl,Qt6不需要。
演示环境:
| 环境 | 版本 |
|---|---|
| 系统 | windows11 |
| Qt | 5.14.2 |
| QtMqtt | 5.14.2 |
| 编译器 | mingw73_64、msvc2017_64 |
2、准备
1.1 下载源码
- 命令行下载源码:下载完成后选择QtMqtt版本,与Qt版本相同或者相近;
git clone https://github.com/qt/qtmqtt.git
git clone http://code.qt.io/qt/qtmqtt.git
git clone https://code.qt.io/qt/qtmqtt.gitgit tag # 查看分支
git checkout 5.14.2 # 切换分支
- 浏览器下载源码:

1.2 配置环境
windows安装perl有几种方式,可以任意选择一种安装。
方法1:
- qt-opensource-windows-x86-5.14.2.exe离线安装包中内置了perl,不过需要在安装时勾选,安装完成Qt后再手动安装;
- 如下图所示,离线安装时勾选
Strawberry Perl;

- 安装完成后进入安装路径下
D:\Qt\Qt5.14.2\Tools\Perl52213_32,就可以看见perl安装包了,然后运行perl安装包进行安装就可以。
方法2:
- 进入perl官网或者github下载;
- Perl Download - www.perl.org
- Releases · StrawberryPerl/Perl-Dist-Strawberry
- 其中的strawberry 为开源免费版本;
- 提供了zip压缩包版本和msi安装程序版本;
- 不过体积都比较大,这里下载一个轻便版本的strawberry-perl-5.40.0.1-64bit-portable.zip
- 解压后如下图所示;

- 然后打开环境变量,点击
path,添加perl/bin文件夹路径到环境变量;

- 保存关闭后,打开cmd窗口,检查perl是否生效;

1.3 解释原理
- Qt编译QtMqtt模块可以使用perl也可以不使用,使用perl在这里主要是为了生成不带.h后缀的头文件,并且自动拷贝头文件到Qt安装路径下;
- 如果不安装perl就需要手动拷贝QtMqtt头文件,并且在后续使用QtMqtt过程中只能使用带.h后缀的头文件,例如:
#include <qmqttclient.h> // 正常
#include <QMqttClient> // 报错
- 不安装perl的编译方式;
- 然后我们打开
src/mqtt/mqtt.pro文件,在文件最下面有一行load(qt_module)代码,这行代码就是用来构建模块的;

- 进入qt_module.prf文件后,有一行
load(qt_build_paths)代码;

- 再进入qt_build_paths.prf 文件,可以看出文件中会判断构建的源码工程下是否有
.git文件夹,如果存在.git文件夹就会执行CONFIG += git_build配置;

- 而
git_build配置位于qt_module_headers.prf文件中,如下图所示,git_build就是调用perl syncqt.pl脚本的配置;

- 所以,默认情况下QtMqtt源码文件夹下必须有一个**.git** 文件夹,否则不会调用perl

- 使用
git clone下载的源码都带有.git文件夹,如果是直接在浏览器下载的就没有,这里有两个解决办法;- 在源码文件夹下创建一个.git文件夹;
- 将qt_build_paths.prf文件中21行注释掉。

3、编译
- 将qtmqtt.pro 文件使用qtcreator打开,然后选择编译器,在设置完编译器之后就会自动在build文件夹下生成头文件;(如果perl升序就不会生成头文件)


- 如下图所示会显示执行perl的日志信息。

-
添加编译配置;
- 选择【项目】【构建】【添加构建步骤】【make】;

- 第一个:在make参数项添加
docs,用于生成帮助手册;(只需要执行一次) - 第二个:在make参数项添加
install_docs,用于自动安装帮助手册;(只需要执行一次) - 第三个:在make参数项添加
install,用于自动安装编译好的qtmqtt; - 注意: 由于帮助手册是安装到公共路径,而其它头文件、动态库是安装到编译器路径下,所以如果给多个编译器配置时docs、install_docs只需要配置一次,而install每个编译器都需要配置。

- 编译报错:是因为使用mingw32-make.exe install安装报错如下所示,这是因为QtMqtt源码放的位置不对;
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\qtmqttversion.h D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\qtmqttversion.h
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\QtMqttVersion D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\QtMqttVersion
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -install qinstall E:\test\qtmqtt\build\MinGW730_64-Debug\include\QtMqtt\QtMqtt D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt\QtMqtt
mingw32-make[3]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src/mqtt'
mingw32-make[2]: *** [Makefile:55: debug-install] Error 2
mingw32-make[2]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src/mqtt'
mingw32-make[1]: *** [Makefile:62: sub-mqtt-install_subtargets] Error 2
mingw32-make[1]: Leaving directory 'E:/test/qtmqtt/build/MinGW730_64-Debug/src'
mingw32-make: *** [Makefile:64: sub-src-install_subtargets] Error 2
15:13:40: 进程"D:\Qt\Qt5.14.2\Tools\mingw730_64\bin\mingw32-make.exe"退出,退出代码 2 。
Error while building/deploying project qtmqtt (kit: MinGW730-64)
When executing step "Make"
- 如下所示,将qtmqtt源码放到
D:\Qt\Qt5.14.2\5.14.2\Src路径下;名称影响。


- 然后使用点击构建,构建完成后就会自动将编译生成的所有文件安装到Qt路径下,这里使用mingw73_64编译器就会将编译生成的文件安装到下面路径了,不需要手动拷贝。
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include\QtMqtt
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\Qt5Mqtt.dll
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\mkspecs\modules\qt_lib_mqtt.pri
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\mkspecs\modules\qt_lib_mqtt_private.pri
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\lib\libQt5Mqtt.a
D:\Qt\Qt5.14.2\Docs\Qt-5.14.2\qtmqtt.qch

4、验证
- 将qtmqtt\examples\mqtt路径下的示例工程复制 出来,使用qtcreator打开进行编译。
- 如果不复制到qtmqtt工程外,可能无法编译,错误如下所示,工程中文件呈现灰色。
Project ERROR: You cannot build examples inside the Qt source tree, except as part of a proper Qt build.

- 将示例程序复制 出来后就编译正常了。(如果没有使用perl,这里编译会显示找不到
#include <QMqttClient>文件)

- 编译成功后如下所示:

- 使用qtmqtt只需要在pro文件中添加
QT += mqtt就可以引入。

5、参考
- qt/qtmqtt.git - Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/
- GitHub - qt/qtmqtt: Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/
- Perl Download - www.perl.org
- Releases · StrawberryPerl/Perl-Dist-Strawberry
6、视频
windows下全网最详细、最简单的QtMqtt编译配置教程;
相关文章:
windows下Qt5自动编译配置QtMqtt环境(11)
文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配…...
速盾:高防cdn有哪些冷知识?
高防CDN(Content Delivery Network)是一种用于提供高可靠性、高性能的互联网服务的技术。它通过将内容分发到离用户最近的服务器上,并优化网络流量,以提升网站的响应速度和承载能力。除了这些基本的了解,下面是一些高防…...
全面UI组件库Telerik 2024 Q4全新发布——官方宣布支持.NET 9
Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供最完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Ken…...
电脑投屏到电脑:Windows,macOS及Linux系统可以相互投屏!
本篇其实是电脑远程投屏到另一台电脑的操作介绍。本篇文章的方法可用于Windows,macOS及Linux系统的相互投屏。 为了避免介绍过程中出现“这台电脑”投屏到“那台电脑”的混乱表述,假定当前屏幕投出端是Windows系统电脑,屏幕接收端是Linux系统…...
12.6深度学习_模型优化和迁移_模型移植
八、模型移植 1. 认识ONNX https://onnx.ai/ Open Neural Network Exchange(ONNX,开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。 ONNX的规范及代码主要由微软…...
Grid++Report:自定义模板设计(自由表格使用),详细教程
实现效果 步骤 一、新建空白 初始状态都是空白页,如果不是,点击右上角->文件->新建空白 二、页面设置 右击页面灰色部分->页面设置 根据需求自定义页面 三、报表头设计 1、新增报表头 右击屏幕->新增->报表节->报表头 点击报表头…...
[Collection与数据结构] 位图与布隆过滤器
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...
idea中新建一个空项目
目的,为了在同一个目录下有多个小的项目:使用IDE为idea2022。 步骤: 点击新建项目,点击创建空项目,这里选择空项目是将其作为其他项目的一个容器,如图所示: 然后点击文件->项目结构…...
【Python】【Conda 】Conda 与 venv 虚拟环境优缺点全解:如何做出明智选择
目录 引言一、基本概念1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、主要区别对比三、优缺点分析3.1 Conda 虚拟环境的优缺点3.2 Python venv 虚拟环境的优缺点 四、使用场景推荐4.1 使用 Conda 虚拟环境的场景4.2 使用 Python venv 虚拟环境的场景 五、虚拟环境管理工具对…...
深度学习在故障检测中的应用:从理论到实践
随着工业设备和信息系统的复杂性增加,故障检测成为企业运维的重要任务。然而,传统的基于规则或统计学的故障检测方法难以应对复杂多变的故障模式。深度学习作为一种强大的数据分析工具,为故障检测提供了新的解决思路。本文将介绍深度学习模型…...
自然语言处理与人工智能
自然语言处理(NLP)与人工智能(AI) 自然语言处理(NLP)是人工智能(AI)领域的一个重要分支,旨在使计算机能够理解、解释和生成自然语言。随着深度学习技术的进步࿰…...
量化交易系统开发-实时行情自动化交易-8.15.Ptrade/恒生平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于Ptrade/恒生平台介绍。 P…...
非常简单实用的前后端分离项目-仓库管理系统(Springboot+Vue)part 4
三十三、出入库管理 Header.vue导一下,RecordController加一个 //将入库数据和原有数据相加吧//新增PostMapping("/save")public Result save(RequestBody Record record) {return recordService.save(record) ? Result.success() : Result.fail();} GoodsManage.v…...
基于MATLAB的信号处理工具:信号分析器
信号(或时间序列)是与特定时间相关的一系列数字或测量值,不同的行业和学科将这一与时间相关的数字序列称为信号或时间序列。生物医学或电气工程师会将其称为信号,而统计学家或金融定量分析师会使用时间序列这一术语。例如…...
Codeforces Round 784 (Div. 4)
题目链接 A. Division? 题意 思路 模拟即可 示例代码 void solve() {int n;cin >> n;int ans;if(n > 1900) ans 1;else if(n > 1600) ans 2;else if(n > 1400) ans 3;else ans 4;cout << "Division " << ans << \n;}B. T…...
OpenNebula 开源虚拟平台,对标 VMware
Beeks Group 主要为金融服务提供商提供虚拟专用服务器和裸机服务器。该公司表示,转向 OpenNebula 不仅大幅降低了成本,还使其虚拟机效率提升了 200%,并将更多裸机服务器资源用于客户端负载,而非像以往使用 VMware 时那样用于虚拟机…...
软件项目标书参考,合同拟制,开发合同制定,开发协议,标书整体技术方案,实施方案,通用套用方案,业务流程,技术架构,数据库架构全资料下载(原件)
1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单&…...
Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1
文章目录 Jenkins环境一站式教程:从安装到配置,打造高效CI/CD流水线环境-Ubuntu 22.04.5 环境离线安装配置 Jenkins 2.479.1一、环境准备1.1 机器规划1.2 环境配置1.2.1 设置主机名1.2.2 停止和禁用防火墙1.2.3 更新系统 二、安装配置Jenkins2.1 安装JDK…...
【Android】ARouter源码解析
本篇文章主要讲解了 ARouter 框架的源码分析,包括其初始化过程、核心方法等。 初始化 在使用ARouter的时候我们都会先进行初始化: ARouter.init(this);我们看下 init() 源码: public static void init(Application application) {// 检查…...
计算直线的交点数
主要实现思路 整体流程思路: 程序旨在解决给定平面上不同数量的直线(无三线共点),求出每种直线数量下所有可能的交点数量,并按要求格式输出的问题。整体通过初始化一个二维数组来存储不同直线数量与交点数量对应的存在…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
LeetCode - 148. 排序链表
目录 题目 思路 基本情况检查 复杂度分析 执行示例 读者可能出的错误 正确的写法 题目 148. 排序链表 - 力扣(LeetCode) 思路 链表归并排序采用"分治"的策略,主要分为三个步骤: 分割:将链表从中间…...
【Java基础】向上转型(Upcasting)和向下转型(Downcasting)
在面向对象编程中,转型(Casting) 是指改变对象的引用类型,主要涉及 继承关系 和 多态。 向上转型(Upcasting) ⬆️ 定义 将 子类对象 赋值给 父类引用(自动完成,无需强制转换&…...
Flask和Django,你怎么选?
Flask 和 Django 是 Python 两大最流行的 Web 框架,但它们的设计哲学、目标和适用场景有显著区别。以下是详细的对比: 核心区别:哲学与定位 Django: 定位: "全栈式" Web 框架。奉行"开箱即用"的理念。 哲学: "包含…...
Java在word中指定位置插入图片。
Java使用(Poi-tl) 在word(docx)中指定位置插入图片 Poi-tl 简介Maven 依赖配置Poi-tl 实现原理与步骤1. 模板标签规范2.完整实现代码3.效果展示 Poi-tl 简介 Poi-tl 是基于 Apache POI 的 Java 开源文档处理库,专注于…...
