• 基于Qt mqtt库的客户端实现


    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

    原因是头文件无法找到,做出如下修改;

    1. //#include <QMqttClient>
    2. #include <QtMqtt/qmqttclient.h>

    再次编译运行,程序可以正常运行。

    简单总结一下:

    • 库版本和位置是否放置在相应编译工具链目录下。
    • 头文件是否对应到类名文件,并放置到编译工具链目录下。
    • modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。
  • 相关阅读:
    Java 网络编程(大全)
    redis常用数据结构基本命令
    基于Java的源代码共享平台设计与实现(源码+lw+ppt+部署文档+视频讲解等)
    【Python报错解决方案】DeprecationWarning: `np.float` is a deprecated
    Vue课程48-学习小结
    算法人生(1):从“强化学习”看如何“战胜拖延”
    UDP和TCP的区别
    Chrome vs Firefox 性能之争,到底哪家强?
    Apple M1 开启HiDPI的新方法,无需虚拟屏,无需SwitchResX
    QMake中的预变量和库链接方式
  • 原文地址:https://blog.csdn.net/qq_36373500/article/details/125393101