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

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <qmqtt.h>
  5. namespace Ui {
  6. class Widget;
  7. }
  8. class Widget : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit Widget(QWidget *parent = 0);
  13. ~Widget();
  14. private slots:
  15. void on_connect_clicked();
  16. void mqtt_connect_success();
  17. void mqtt_disconnect();
  18. void mqtt_sub_success(QString topic, quint8 qos = 0);
  19. void mqtt_recv_msg(QMQTT::Message msg);
  20. void on_sub_clicked();
  21. void on_pub_clicked();
  22. private:
  23. Ui::Widget *ui;
  24. QMQTT::Client *mqtt;
  25. };
  26. #endif // WIDGET_H

Widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent) :
  4. QWidget(parent),
  5. ui(new Ui::Widget)
  6. {
  7. ui->setupUi(this);
  8. }
  9. Widget::~Widget()
  10. {
  11. delete ui;
  12. }
  13. void Widget::on_connect_clicked()
  14. {
  15. mqtt = new QMQTT::Client(QHostAddress(QString(ui->host->text())),ui->port->text().toInt());
  16. connect(mqtt, SIGNAL(connected()), this, SLOT(mqtt_connect_success()));
  17. connect(mqtt, SIGNAL(disconnected()), this, SLOT(mqtt_disconnect()));
  18. connect(mqtt, SIGNAL(subscribed(QString,quint8)), this, SLOT(mqtt_sub_success(QString,quint8)));
  19. connect(mqtt, SIGNAL(received(QMQTT::Message)), this, SLOT(mqtt_recv_msg(QMQTT::Message)));
  20. mqtt->setCleanSession(true);
  21. mqtt->connectToHost(); //连接mqtt
  22. }
  23. void Widget::mqtt_connect_success() //连接成功
  24. {
  25. ui->textBrowser->append("连接成功");
  26. }
  27. void Widget::mqtt_disconnect() //连接断开
  28. {
  29. ui->textBrowser->append("连接断开");
  30. }
  31. void Widget::mqtt_sub_success(QString topic,quint8 qos) //订阅成功
  32. {
  33. QString msg = "订阅主题 ";
  34. msg += ui->sub_topic->text();
  35. msg += " 成功";
  36. ui->textBrowser->append(msg);
  37. }
  38. void Widget::mqtt_recv_msg(QMQTT::Message msg) //接收消息处理
  39. {
  40. QString recv_msg = "Topic:";
  41. QString data = msg.payload();
  42. recv_msg += msg.topic();
  43. recv_msg += " Payload:";
  44. recv_msg += data;
  45. ui->textBrowser->append(recv_msg);
  46. }
  47. void Widget::on_sub_clicked() //订阅
  48. {
  49. mqtt->subscribe(ui->sub_topic->text(),1);
  50. }
  51. void Widget::on_pub_clicked() //发布消息
  52. {
  53. QMQTT::Message msg;
  54. msg.setTopic(ui->pub_topic->text());
  55. msg.setPayload(ui->pub_msg->text().toLocal8Bit());
  56. mqtt->publish(msg);
  57. }

参考网址 已经可以确认用此方案

https://www.freesion.com/article/4264808261/