Qt - QMQTT订阅者和发布者

721 篇文章 ¥119.90 ¥299.90
本文介绍了如何利用Qt的QMQTT库创建订阅者和发布者。文章将后续分享QMQTT模块的编译和应用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

使用Qt官方提供的QMQTT源代码编译为QMQTT模块,来编写简单的订阅者和发布者。

注:随后的文章里面会增加怎么实现QMQTT模块的编译和使用。

订阅者

#ifndef SUBSCRIBER_H
#define SUBSCRIBER_H

#include <QObject>

#include <QDebug>
#include <qmqtt.h>
#include <QTimer>


//订阅
class Subscriber : public QMQTT::Client {
    Q_OBJECT
  public:
    explicit Subscriber(const QHostAddress& host,
                        const quint16 port,
                        QObject* parent = NULL)
        : QMQTT::Client(host, port, parent)
        , _qout(stdout) {
        connect(this, &Subscriber::connected, this, &Subscriber::onConnected);
        connect(this, &Subscriber::subscribed, this, &Subscriber::onSubscribed);
        connect(this, &Subscriber::received, this, &Subscriber::onReceived);
    }
    virtual ~Subscriber() {}

    QTextStream _qout;

  public slots:
    void onConnected() {
        qDebug() << "connected" << endl;
        subscribe("qmqtt/exampletopic", 0);
    }

    void onSubscribed(const QString& topic) {
        qDebug() << "subscribed " << topic << endl;
    }

    void onReceived(const QMQTT::Message& message) {
        qDebug() << "publish received: \""
                 << QString::fromUtf8(message.payload())
                 << "\"" << endl;
    }
};


#endif // SUBSCRIBER_H

发布者

#ifndef PUBLISHER_H
#define PUBLISHER_H

#include <QObject>

#include <QDebug>
#include <qmqtt.h>
#include <QTimer>

//发布
class Publisher : public QMQTT::Client {
    Q_OBJECT
  public:
    explicit Publisher(const QHostAddress& host,
                       const quint16 port,
                       QObject* parent = NULL)
        : QMQTT::Client(host, port, parent), _number(0) {

        connect(this, &Publisher::connected, this, &Publisher::onConnected);
        connect(&_timer, &QTimer::timeout, this, &Publisher::onTimeout);
        connect(this, &Publisher::disconnected, this, &Publisher::onDisconnected);
    }
    virtual ~Publisher() {}

    QTimer _timer;
    quint16 _number;

  public slots:
    void onConnected() {
        subscribe("qmqtt/exampletopic", 0);
        _timer.start(1000);
    }

    void onTimeout() {
        QMQTT::Message message(_number, "qmqtt/exampletopic",
                               QString("Number is %1").arg(_number).toUtf8());
        publish(message);
        _number++;
//        if(_number >= 10) {
//            _timer.stop();
//            disconnectFromHost();
//        }
    }

    void onDisconnected() {}
};

#endif // PUBLISHER_H
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值