zoukankan      html  css  js  c++  java
  • Qt开发MQTT

    原文地址 https://blog.csdn.net/luoyayun361/article/details/104671603

    概述

    Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码。那么,这里先来介绍第一种,如基于Qt官方提供的封装来使用MQTT。

    Qt官方虽然在2017年就已经提供了对MQTT的封装,但是并没有正式加入到Qt的标准库里面,所以需要自己下载源码进行编译。

    Qt官方介绍文档地址:https://doc.qt.io/QtMQTT/qtmqtt-index.html

    下载

    Qt官方在github上提供了源代码,地址:https://github.com/qt/qtmqtt

    这是最新的,基于MQTT 5.0协议的版本。先把源码下载下来。

    编译

    下载源码后得到如下文件,直接打开工程文件准备编译

    我这里的编译环境是:Qt5.14.1+mingw7.3.0

    注意,编译这个源码需要安装perl,否则会报错:perl 不是内部或外部命令,也不是可运行的程序。

    perl下载地址:https://www.perl.org/get.html
    官网下载速度比较慢,我上传到网盘了,可以在这里下载:

    链接:https://pan.baidu.com/s/1p5YOo-FU-ZLJUtuZSN0Rjg 提取码:i0dm

    安装完Perl后会自动写入环境变量, 这时候再次编译(Release模式)QtMqtt源码,编译完成后得到以下文件;

    接下来就可以将mqtt部署到自己的Qt项目中了

    编译时出现的问题:

    connect(socket, &QAbstractSocket::errorOccurred, this, &QMqttConnection::transportError);
    

    替换为

    connect(socket, static_cast<void(QAbstractSocket::*)(QAbstractSocket::SocketError)> (&QAbstractSocket::error), 
                this, static_cast<void(QMqttConnection::*)(QAbstractSocket::SocketError)>(&QMqttConnection::transportError) );
    
            m_receiveAliases.resize(m_clientPrivate->m_serverConnectionProperties.maximumTopicAlias());
            m_publishAliases.resize(m_clientPrivate->m_connectionProperties.maximumTopicAlias());
    

    替换为

            m_receiveAliases.reserve(m_clientPrivate->m_serverConnectionProperties.maximumTopicAlias());
            m_publishAliases.reserve(m_clientPrivate->m_connectionProperties.maximumTopicAlias());
    
            const auto filterLevels = QStringView{d->filter}.split(QLatin1Char('/'));
            const auto topicLevels = QStringView{topic}.split(QLatin1Char('/'));
    

    替换为

            const auto filterLevels = QString{d->filter}.split(QLatin1Char('/'));
            const auto topicLevels = QString{topic}.split(QLatin1Char('/'));
    

    部署

    将QtMqtt的库直接部署到Qt安装目录中,这样只需要部署一次,以后在任何工程中引用都不需要再额外导入库了。

    首先,将qtmqtt源码目录下(qtmqttsrcmqtt)的所有.h头文件拷贝,Qt安装目录下的include文件夹中创建一个mqtt目录,将拷贝的文件粘贴进去:

    然后,将源码编译生成目录下的lib中以下6个文件拷贝,注意这里编译的是DEBUG版本,一般还要编译RELEASE版本,重复以下操作.

    将上图中的文件拷贝到

    然后把

    拷贝到

    并把

    拷贝到

    ok,配置完毕,这种方式配置在新建工程中引用只需要引入模块就可以直接使用了

    QT += mqtt
    

    包含头文件

    #include <QtMqtt/QtMqtt.h>
    
  • 相关阅读:
    关于近期
    Tips on Importons and Irradiance Particles in mental ray
    给她的歌
    Fatal In Code Generation Of Visual C++
    kdtree vs octree
    疯子的胜利——记6.18毕业晚会
    转凉
    事件与委托的匿名方法使用方法示例
    VS2008使用技巧
    硬链接和软连接的区别
  • 原文地址:https://www.cnblogs.com/charleechan/p/13931498.html
Copyright © 2011-2022 走看看