自学内容网 自学内容网

关于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联合开发的简单实现和测试完成。


原文地址:https://blog.csdn.net/qq_17769915/article/details/143937543

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!