Qt之qmqtt库的安装和使用

本文详细介绍了如何从源码下载并编译qmqtt库,以及如何在Qt项目中添加和使用该库。通过示例代码展示了连接、订阅、发布消息的基本操作。

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

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

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值