赞
踩
一、下载qmqtt源码
下载地址:https://github.com/emqtt/qmqtt
二、 编译qmqtt库
1、打开工程
2、选择默认构建套件后,点击Release->client,再点击“锤子”进行编译。
3、构建完毕,即可在工程目录下看到生成的lib文件夹,我们所需要的qmqtt库就在里面。
三、 使用qmqtt库
1、在需要调用qmqtt的工程文件中添加:QT += network 如下图所示:
2、右键项目名称,点击添加库...,选择外部库,下一步。
其中库文件选择刚刚编译出来的lib文件夹下的libqmqtt.a,包含路径选择工程源码目录下的mqtt文件夹,选择平台,然后点击下一步,如图所示:
点击完成,Qt Creator则自动将qmqtt库路径及头文件路径都添加到工程文件中:
在需要使用mqtt的类的头文件中添加qmqtt.h头文件即可使用了,如下图所示。
四、使用示例
1、测试程序界面如图所示:
2、示例代码如下:
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);
- }

main.c
- #include "widget.h"
- #include <QApplication>
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
-
- return a.exec();
- }
3、测试结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。