关于mqtt协议与qt联合开发的实现记录
这里写自定义目录标题
- 一、编译安装
- 二、代码应用
一、编译安装
1、下载源码
这里建议以下地址源码,对比了多个源码,发现这个较为好用,接口较全。
git clone https://github.com/emqx/qmqtt
2、编译源码
cd qmqtt
qmake
make
make install
以上指令可以将编译好的库和头文件安装到系统中指定的位置,我们在使用的时候可以通过以下片段进行引用
QT += qmqtt
如果不想这样使用,在make的生成目录中有includ和lib文件夹,这里需要注意一下,需要把src/mqtt下的头文件复制到make生成的include文件夹中,然后才能正常使用include和lib文件夹。
二、代码应用
.h声明,引用qmqtt头文件,
#include "qmqtt.h" /*包含头文件*/
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QMQTT::Client* pClient;
QTimer mTimer;
public slots:
void slotConnect();
void slotDisConnect();
void slotRecv(const QMQTT::Message& message);
void slotCyclePub();
void on_pushButton_clicked();
private slots:
void on_pushButton_2_clicked();
};
.cpp实现
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
pClient = new QMQTT::Client;
connect(pClient,&QMQTT::Client::connected,this,&Widget::slotConnect);
connect(pClient,&QMQTT::Client::disconnected,this,&Widget::slotDisConnect);
connect(pClient,&QMQTT::Client::received,this,&Widget::slotRecv);
pClient->setHostName("localhost");
pClient->setPort(1883);
pClient->connectToHost();
pClient->setAutoReconnect(true);
mTimer.setInterval(100);
connect(&mTimer,&QTimer::timeout,this,&Widget::slotCyclePub);
}
Widget::~Widget()
{
delete ui;
}
void Widget::slotConnect()
{
qDebug() << "conn succ";
}
void Widget::slotDisConnect()
{
qDebug() << "disconnect, reconn ";
}
void Widget::slotRecv(const QMQTT::Message& message)
{
qDebug() <<"slotRecv:::" <<message.topic() << message.payload();/*接受话题并打印*/
}
void Widget::slotCyclePub()
{
static int cnt = 0;
QMQTT::Message msg;
msg.setTopic(QString("hello"));
msg.setPayload(QString("测试>>%1").arg(cnt).toLocal8Bit());
pClient->publish(msg);/*发布话题消息*/
cnt++;
}
void Widget::on_pushButton_clicked()
{
if(mTimer.isActive())
{
mTimer.stop();
}
else
{
mTimer.start();
}
}
void Widget::on_pushButton_2_clicked()
{
qDebug() << "sub:::" ;
pClient->subscribe(QString("hello")); /*订阅话题*/
}
至此,关于mqtt协议与qt联合开发的简单实现和测试完成。