1 QT之官方MQTT的使用
https://www.cnblogs.com/chq1224/p/14962585.html
第三方库
https://blog.csdn.net/luoyayun361/article/details/104671603
2 QT之QMQTT库的安装和使用
一、下载qmqtt源码
下载地址:https://github.com/emqtt/qmqtt 二、 编译qmqtt库 三、 使用qmqtt库四、使用示例
需要注意的是只有连接成功后才会触发发布订阅和订阅Widget.h
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <qmqtt.h>namespace Ui {class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_connect_clicked();void mqtt_connect_success();void mqtt_disconnect();void mqtt_sub_success(QString topic, quint8 qos = 0);void mqtt_recv_msg(QMQTT::Message msg);void on_sub_clicked();void on_pub_clicked();private:Ui::Widget *ui;QMQTT::Client *mqtt;};#endif // WIDGET_H
Widget.cpp
#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}Widget::~Widget(){delete ui;}void Widget::on_connect_clicked(){mqtt = new QMQTT::Client(QHostAddress(QString(ui->host->text())),ui->port->text().toInt());connect(mqtt, SIGNAL(connected()), this, SLOT(mqtt_connect_success()));connect(mqtt, SIGNAL(disconnected()), this, SLOT(mqtt_disconnect()));connect(mqtt, SIGNAL(subscribed(QString,quint8)), this, SLOT(mqtt_sub_success(QString,quint8)));connect(mqtt, SIGNAL(received(QMQTT::Message)), this, SLOT(mqtt_recv_msg(QMQTT::Message)));mqtt->setCleanSession(true);mqtt->connectToHost(); //连接mqtt}void Widget::mqtt_connect_success() //连接成功{ui->textBrowser->append("连接成功");}void Widget::mqtt_disconnect() //连接断开{ui->textBrowser->append("连接断开");}void Widget::mqtt_sub_success(QString topic,quint8 qos) //订阅成功{QString msg = "订阅主题 ";msg += ui->sub_topic->text();msg += " 成功";ui->textBrowser->append(msg);}void Widget::mqtt_recv_msg(QMQTT::Message msg) //接收消息处理{QString recv_msg = "Topic:";QString data = msg.payload();recv_msg += msg.topic();recv_msg += " Payload:";recv_msg += data;ui->textBrowser->append(recv_msg);}void Widget::on_sub_clicked() //订阅{mqtt->subscribe(ui->sub_topic->text(),1);}void Widget::on_pub_clicked() //发布消息{QMQTT::Message msg;msg.setTopic(ui->pub_topic->text());msg.setPayload(ui->pub_msg->text().toLocal8Bit());mqtt->publish(msg);}
参考网址 已经可以确认用此方案
