
以下是一个使用 qmqttclient 库进行 MQTT 通信的 Qt 代码示例:
#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();
}QCoreApplication 是 Qt 核心应用程序类,是 Qt 应用程序的基础。QDebug 用于输出调试信息。QMqttClient 是 Qt 提供的 MQTT 客户端类,用于实现 MQTT 通信。QMqttClient client; 创建一个 MQTT 客户端对象,用于后续的 MQTT 操作。client.setHostname("localhost"); 设置 MQTT 服务器的主机名。client.setPort(1883); 设置 MQTT 服务器的端口号,通常 MQTT 的默认端口是 1883。client.connectToHost(); 发起连接到 MQTT 服务器的操作。QObject::connect 连接 connected 信号,当客户端成功连接到 MQTT 服务器时,会触发该信号。在信号的槽函数中: "test/topic",使用 client.subscribe(topic);。messageReceived 信号,当收到消息时,会触发该信号。在信号的槽函数中,打印收到的消息和消息所在的主题。"Hello, MQTT!" 到主题 "test/topic",使用 client.publish(pubTopic, payload.toUtf8());。QObject::connect 连接 disconnected 信号,当客户端断开连接时,会触发该信号。在信号的槽函数中,打印断开连接的消息。qmqttclient 库,可以通过 Qt 的包管理工具(如 qmake 或 CMake)添加对该库的依赖。localhost,端口为 1883)。test/topic 主题,接收该主题下的消息,并发布一条消息。qDebug() 输出的信息将显示在控制台中,包括连接状态、消息接收和发布信息。注意:在实际应用中,你可以根据需要添加更多的逻辑,例如处理不同的主题、不同的 QoS 等级,以及处理连接错误和重连等情况。你可以根据具体需求,在 connected、disconnected 和 messageReceived 信号的槽函数中添加更多的操作。