首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【计算机网络通信 MQTT】使用Qt调用 qmqttclient 库进行 MQTT 通信

【计算机网络通信 MQTT】使用Qt调用 qmqttclient 库进行 MQTT 通信

作者头像
flos chen
发布2026-01-23 15:20:43
发布2026-01-23 15:20:43
1680
举报

以下是一个使用 qmqttclient 库进行 MQTT 通信的 Qt 代码示例:

代码语言:javascript
复制
#include <QCoreApplication>
#include <QDebug>
#include <QMqttClient>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    // 创建 MQTT 客户端对象
    QMqttClient client;


    // 设置 MQTT 服务器地址和端口
    client.setHostname("localhost");
    client.setPort(1883);


    // 连接到 MQTT 服务器
    client.connectToHost();


    // 当客户端连接成功时,触发 connected 信号
    QObject::connect(&client, &QMqttClient::connected, [&]() {
        qDebug() << "Connected to MQTT server";


        // 订阅主题
        QString topic = "test/topic";
        client.subscribe(topic);
        qDebug() << "Subscribed to topic:" << topic;


        // 当收到消息时,触发 messageReceived 信号
        QObject::connect(&client, &QMqttClient::messageReceived, [&](const QByteArray &message, const QMqttTopicName &topic) {
            qDebug() << "Received message on topic" << topic.name() << ":" << message;
        });


        // 发布消息
        QString payload = "Hello, MQTT!";
        QMqttTopicName pubTopic("test/topic");
        client.publish(pubTopic, payload.toUtf8());
        qDebug() << "Published message:" << payload;
    });


    // 当客户端连接断开时,触发 disconnected 信号
    QObject::connect(&client, &QMqttClient::disconnected, [&]() {
        qDebug() << "Disconnected from MQTT server";
    });


    return a.exec();
}
代码解释
  1. 头文件导入
    • QCoreApplication 是 Qt 核心应用程序类,是 Qt 应用程序的基础。
    • QDebug 用于输出调试信息。
    • QMqttClient 是 Qt 提供的 MQTT 客户端类,用于实现 MQTT 通信。
  2. 创建 MQTT 客户端对象
    • QMqttClient client; 创建一个 MQTT 客户端对象,用于后续的 MQTT 操作。
  3. 设置 MQTT 服务器信息
    • client.setHostname("localhost"); 设置 MQTT 服务器的主机名。
    • client.setPort(1883); 设置 MQTT 服务器的端口号,通常 MQTT 的默认端口是 1883。
  4. 连接到 MQTT 服务器
    • client.connectToHost(); 发起连接到 MQTT 服务器的操作。
  5. 连接成功后的操作
    • 使用 QObject::connect 连接 connected 信号,当客户端成功连接到 MQTT 服务器时,会触发该信号。在信号的槽函数中:
      • 打印连接成功的消息。
      • 订阅主题 "test/topic",使用 client.subscribe(topic);
      • 连接 messageReceived 信号,当收到消息时,会触发该信号。在信号的槽函数中,打印收到的消息和消息所在的主题。
      • 发布消息 "Hello, MQTT!" 到主题 "test/topic",使用 client.publish(pubTopic, payload.toUtf8());
  6. 连接断开后的操作
    • 使用 QObject::connect 连接 disconnected 信号,当客户端断开连接时,会触发该信号。在信号的槽函数中,打印断开连接的消息。
使用说明
  1. 确保你已经在你的 Qt 项目中包含了 qmqttclient 库,可以通过 Qt 的包管理工具(如 qmakeCMake)添加对该库的依赖。
  2. 编译并运行这个程序,它将连接到本地的 MQTT 服务器(假设服务器地址为 localhost,端口为 1883)。
  3. 程序将连接到服务器,订阅 test/topic 主题,接收该主题下的消息,并发布一条消息。
  4. 观察程序的输出,使用 qDebug() 输出的信息将显示在控制台中,包括连接状态、消息接收和发布信息。

注意:在实际应用中,你可以根据需要添加更多的逻辑,例如处理不同的主题、不同的 QoS 等级,以及处理连接错误和重连等情况。你可以根据具体需求,在 connecteddisconnectedmessageReceived 信号的槽函数中添加更多的操作。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码解释
  • 使用说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档