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_OBJECT
public:
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);
}
参考网址 已经可以确认用此方案