当前位置: 首页 > article >正文

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


http://www.kler.cn/a/408951.html

相关文章:

  • ABC002D 派閥题解
  • NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案
  • C#对INI配置文件进行读写操作方法
  • C0030.Clion中运行提示Process finished with exit code -1073741515 (0xC0000135)解决办法
  • 字符串的常用函数
  • 高质量代理池go_Proxy_Pool
  • 用Tauri框架构建跨平台桌面应用:1、Tauri快速开始
  • 【桂林理工大学主办 | 往届均已EI检索】第五届能源工程、新能源材料与器件国际学术会议(NEMD 2025)
  • ctfshow -web 89-115-wp
  • 数据结构之二:表
  • RoPE——Transformer 的旋转位置编码
  • Centos使用docker搭建Graylog日志平台
  • python中的base64使用小笑话
  • vue从入门到精通(七):事件处理
  • 全新三网话费余额查询API系统源码 Thinkphp全开源 附教程
  • 力扣力扣力:860柠檬水找零
  • 【机器学习监督学习】:从原理到实践,探索算法奥秘,揭示数据标注、模型训练与预测的全过程,助力人工智能技术应用与发展
  • Unity 内置枚举(Option Stencil)
  • 【AI技术赋能有限元分析应用实践】Abaqus、 Ansys、FEniCSx 有限元结合深度学习
  • Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取
  • FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡
  • 网站渗透测试工具zap2docker-stable
  • H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏
  • 第425场周赛题解:最小正和子数组
  • Fakelocation Server服务器/专业版 Centos7
  • 图形渲染性能优化