Qt6 qtmqtt编译及演示示例(附带动态库)

news/2024/11/28 4:25:18/

前言

随着物联网的不断发展,如今很多项目都需要接入,而两年前也是因为项目需要,了解了一些关于mqtt的用法,并将其过程记录成几篇博客,近一年多时间陆陆续续有好多人私信咨询关于mqtt相关的问题,其中又有很多是关于最基础的源码编译相关的。我之前刚接触的时候还没有Qt6,那时候我的编译环境是Qt5.12.3+vs2017,下载代码后直接qmake编译,编译过程也很顺利,基本没遇到什么困难,一路畅通。
随着Qt6的发布,Qt官方开始推崇cmake编译,而qtmqtt对应的版本和Qt发布的版本一致的,所以qtmqtt从6.0发布以来,也开始默认用cmake编译。这样一来,很多之前习惯用Qt5的童鞋就有点摸不着头脑了,特别是一些刚入门的新手,看到Qt工程,习惯性的一上来就去找pro工程文件,但是Qt6的cmake工程是没有pro文件的,所以更是二脸懵逼。接着又是在之前的文章评论,又是私信来问。本来我自己也没有安装Qt6,索性趁空闲时间配置一个Qt6环境然后重新编译一下qtmqtt,然后运行demo重新跑一遍。把过程详细记录下来,供有需要的参考。

之前的博文地址:
Qt开发MQTT(一) 之Qt官方Qt MQTT
其他文章


资源在这里,点击下载

环境:Qt6.2.4+vs2019 x64
里面包含了编译好的Debug和Release动态库 ,以及qt在线安装包软件和perl安装包。


正文

回到主题,今天的目的是使用Qt6编译qtmqtt,目前Qt最新发布的版本是Qt6.4.1,我比较喜欢用长维版本(比较稳定,Qt官方长期维护),目前Qt6的长维版本是6.2.4,所以我配置的Qt环境是Qt6.2.4+vs2019 x64

Qt安装及环境配置就不说了吧,新版本的Qt都是在线安装的,在官方下载一个安装器,选择相应的版本安装就可以了。
接下来我们主要看qtmqtt的流程。

qtmqtt源代码下载

源代码在github上 ,地址:https://github.com/qt/qtmqtt
将代码clone到本地后,先开看下项目分支:
在这里插入图片描述
可以看到qtmqtt是从最早的5.10版本开始,一直到现在最新的6.3.0版本,这里的版本号是对应Qt的发布版本号。由于我配置的Qt环境是Qt6.2.4,所以这里也对应将qtmqtt的 6.2.4分支迁到本地。

 git checkout -b 6.2.4 origin/6.2.4

在这里插入图片描述
如果你想编其他版本,那么下载对应的源代码就可以了。

源代码目录:
在这里插入图片描述

环境准备

除了配置Qt和vs环境,
在编译mqtt之前,需要先安装perl,python,conan
python安装直接在官网下载,安装完设置环境变量
conan安装有两种方式,一种是pip安装,需要python环境,另一种是官网下载exe安装。由于已经安装了python,所以可以直接用pip安装,更方便一些,直接cmd打开终端,输入 pip install conan 就可以安装了。

全部安装完后,记得设置环境变量:

在这里插入图片描述

编译

接下来在Qt Creator中打开qtmqtt源码,前面说了 Qt6默认是cmake编译,所以没有pro工程文件,mqtt源码下只有CMakeLists文件,所以在Qt Creator的时候直接载入CMakeLists文件即可。
在这里插入图片描述
导入后是这样
在这里插入图片描述

ok,接下来有个很重要的步骤,在Qt Creator中使用系统环境变量

点击 项目, 找到 构建 环境变量
在这里插入图片描述
点击path项,然后点击右侧的 Edit按钮,弹窗点击确定。
在这里插入图片描述

然后再编译,就成功了
在这里插入图片描述
如果不设置的话 ,还是会报错。

ok了,经过以上步骤可以快速的编译出debug和release版本了。

编译出来的文件
在这里插入图片描述

编译Demo

库编译完成,接下来跑一个demo。
在mqtt源码目录下有examples,里面有一些基础demo,拷贝一个出来跑一下。

在这里插入图片描述
示例里面还是保留了之前的工程文件pro,所以导入到Qt Creator后直接qmake编译就可以。
但是demo中有些地方需要改一下,由于我们编译完mqtt后没有将库和modules等相关文件拷贝配置到Qt的安装目录下去,所以直接引用mqtt模块是找不到的。

所以直接按第三方库使用的方式,单独把lib、dll、include 文件放到自己的demo中去引用就行了。
而mqtt自带的demo就需要改造一下才能用。
打开simpleclient.pro文件
在这里插入图片描述
这里直接去掉mqtt模块引用,以及target path设置
手动添加一个mqtt.pri模块
创建一个mqtt文件夹
在这里插入图片描述
将lib 和 include文件拷贝过来放到模块中,这样也方便后期直接挪到其他项目中去使用
在这里插入图片描述
注意,这里用到的include 头文件不能直接用编译源码输出目录下的include文件
就是这个
在这里插入图片描述
千万不能直接把源码输出目录下的include文件拷到自己项目中去使用,因为这里面的头文件只是一个源码相对路径的文件引用。拿到自己的项目中去使用会报错,所以应该直接从mqtt源码目录下把真正的头文件拷贝出来放到include下面。
在这里插入图片描述
mqtt.pri文件是自己创建的,添加库引用

!contains(INCLUDEDFIES, mqtt.pri) {
INCLUDEDFIES += mqtt.priINCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/includewin32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQt6Mqtt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQt6Mqttd}

接下来修改mainwindow.h中的头文件引用
在这里插入图片描述
这里是直接以模块的方式引用头文件,由于我们没有添加mqtt模块到Qt安装目录下,所以这里要修改成demo目录下的头文件引用

#include "QtMqtt/qmqttclient.h"

然后 cpp中的头文件引用直接注释掉,多余了
在这里插入图片描述

接下来就可以直接编译这个demo了。

运行起来是这样
在这里插入图片描述
在以前的文章中已经介绍过这个demo,文章在这里

Qt官方提供了一个测试服务器地址,直接在 Host处输入:broker.hivemq.com 然后点击connect连接

在这里插入图片描述
状态是2表示连接成功,接下来点击订阅,然后点击发布按钮,就可以收到发布的消息了

在这里插入图片描述

ok了 大功告成。

最后

将本次编译出来的动态库及demo打包出来了,有需要的可以下载,


资源在这里,点击下载

环境:Qt6.2.4+vs2019 x64
里面包含了编译好的Debug和Release动态库 ,以及qt在线安装包软件和perl安装包。


在这里插入图片描述

demo下的mqtt目录可以直接拷贝到其他项目使用
在这里插入图片描述

Finish~


http://www.ppmy.cn/news/4080.html

相关文章

牛客java刷题知识点总结(六)

内存引用地址 内存引用地址,是指栈中存放的地址,来指向堆中的某个位置。 int 是基本类型,数据直接存放在栈中,不存在内存引用地址的说法 A对 指向常量池里的"hello"。 B对 题中没说声明的a是局部变量。 C错 int a 1;并…

QT 学习笔记(九)

文章目录一、事件的接收和忽略1. 准备工作2. 接收和忽略二、event() 函数1. 简介2. 实例演示3. 总结三、事件过滤器四、总结(细看)1. 知识点汇总2. QT 的事件处理五、事件、事件的接收和忽略、event() 函数和事件过滤器代码1. 主窗口头文件 mywidget.h2.…

2023养老展,北京老博会,老年用品与适老家具展,老龄产业展

CBIAIE北京老博会的价值|引导社会关注老年人生活,助力老年产业发展,提升企业市场竞争力与美誉度; CBIAIE北京老博会:全称:中国(北京)国际老年产业博览会China (Beijing) International Aged in…

33-Vue之ECharts-仪表盘图

ECharts-仪表盘图前言仪表盘的特点仪表盘的基本实现仪表盘的常见效果前言 本篇来学习写仪表盘图 仪表盘的特点 可以更直观的表现出某个指标的进度或实际情况 仪表盘的基本实现 ECharts 最基本的代码结构准备数据, 设置给 series 下的 data在 series 下设置 type:gauge &l…

Halcon图像拼接

图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 如按下图是将两张楼房图片拼接成一个图像。…

MySQL之聚合查询和联合查询

一、聚合查询(行与行之间的计算) 1.常见的聚合函数有: 函数 说明 count 查询到的数据的数量 sum 查询到的数据的总和(针对数值,否则无意义) avg 查询到的数据的平均值(针对数值&#xf…

Python开发游戏?也太好用了吧

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 当然可以啦! 现在日常能够用到和想到的场景,绝大多数都可以用Python实现。 效果怎么样暂且不提,但是得益于丰富的第三方工具包,的确让Python能够很容易…

const成员和static成员详解

const成员和static成员详解1.const成员函数2.static成员(1)静态成员变量(2)静态成员函数(3)静态成员使用场景1.const成员函数 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函…