Qt开发MQTT程序有两种方式;
- Qt官方已经提供了基于MQTT的封装,但是并没有正式加入到Qt的标准库中,需要自己进行编译添加;
- 基于第三方EMQ开发的MQTT接口;
本文主要介绍第一种方式,即使用Qt官方的MQTT封装库,我们将编译MQTT库,并测试一个官方的Demo。
下载地址
Qt已经在GitHub上托管了相应的MQTT库的代码,地址:https://github.com/qt/qtmqtt
这个库是基于MQTT V3.1和V3.1.1实现的,这里要注意协议版本。
如上图所示,这里有很多分支;
测试环境
Win10
+QtCreator
+ MinGW-W64
QT版本:Qt5.14.01
MQTT库版本:5.14.02
编译QtMqtt库
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\include(安装目录上和帮助里面看到的版本不一致,我不知道为什么)
在Qt的安装目录下新建QtMqtt
文件夹;
然后将qtmqtt-5.14.02路径下的文件复制到新建的路径下;
具体的实际路径要根据自己的安装情况为主。
这时候我们重新回到qtmqtt-5.14.02路径下,打开qtmqtt.pro
,就可以进行编译了;
这里可以编译成Debug和Release模式,
- 编译成功之后就可以找到
Qt5Mqtt.dll
复制到bin目录下
- 复制lib下的文件到安装目录lib下
这时候,我们可以打开simple mqtt client
项目进行测试了,路径如下所示;
这时候已经可以进行编译了,但是会发现有还两个报错情况:
第一个报错信息如下:
Unknown module(s) in QT: mqtt
无法识别mqtt模块;
解决方案如下:
将qt_lib_mqtt.pri
文件和qt_lib_mqtt_private.pri
复制到Qt的安装路径下的mkspecs\modules
路径中即可
第二个报错息如下:
QMqttClient does not exist
原因是头文件无法找到,做出如下修改;
//#include <QMqttClient>
#include <QtMqtt/qmqttclient.h>
再次编译运行,程序可以正常运行。
简单总结一下:
- 库版本和位置是否放置在相应编译工具链目录下。
- 头文件是否对应到类名文件,并放置到编译工具链目录下。
- modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。