一、下载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、测试结果