Qt 最新版6.9.0使用MQTT连接腾讯云详细教程
Qt 最新版6.9.0使用MQTT连接腾讯云详细教程
- 一、MQTT介绍
- 二、MQTT库编译
- 1、源码下载
- 2、源码编译
- 三、库的使用方法
- 四、MQTT连接设备
- 1、包含头文件
- 2、定义一个mqtt客户端
- 3、实例并连接相关信号与槽
- 4、连接服务器
- 5、订阅topic
一、MQTT介绍
1. 概述
- 全称: Message Queuing Telemetry Transport (消息队列遥测传输协议)
- 类型: 轻量级的消息传输协议
- 用途: 适用于物联网(IoT)设备和受限网络环境中的数据传输
2. 特点
- 轻量级: 协议开销小,适合资源有限的设备
- 低带宽: 高效利用网络带宽
- 简单易用: 易于实现和集成
- 可靠性高: 支持多种服务质量级别
3. 架构
- 发布/订阅模式: 设备通过主题(Topic)进行通信
- Broker: 中心节点,负责消息的转发
- Client: 发布或订阅消息的终端设备
4. 工作流程
- 连接建立: 客户端与Broker建立TCP连接
- 认证与授权: 客户端提供用户名和密码进行身份验证
- 发布消息: 客户端将消息发送到指定主题
- 订阅消息: 客户端订阅感兴趣的主题
- 接收消息: Broker将消息分发给订阅了相应主题的客户端
5. 应用场景
- 智能家居: 控制和监控家庭设备
- 工业自动化: 实时数据采集和控制
- 车联网: 车辆与基础设施之间的通信
- 远程监控: 远程设备的状态监测和管理
二、MQTT库编译
1、源码下载
点击链接Qt MQTT
选择Qt版本下载
2、源码编译
将下载的源码解压后用Qt打开。
直接点击左下角编译
编译成功后会出现下图中的几个文件夹:
三、库的使用方法
1、首先将lib文件夹中的libQt6Mqtt.a
和Qt6Mqtt.dll
拷贝到自己工程中
2、将下载源码中\qtmqtt-6.9.0\src\mqtt
目录中的头文件全部拷贝到自己工程对应目录中:
完成如下:
3、在自己工程中添加库:右键工程
选择库和对应头文件目录:
点击确定就OK了。
四、MQTT连接设备
1、包含头文件
#include <qmqttclient.h>
#include <qmqttsubscription.h>
2、定义一个mqtt客户端
QMqttClient *mqttClient = nullptr;
3、实例并连接相关信号与槽
this->mqttClient = new QMqttClient(this);
connect(this->mqttClient,&QMqttClient::messageReceived,this,&MainWindow::mqttReadyReadSlot);
connect(this->mqttClient,&QMqttClient::connected,this,[=](){qDebug()<<"subscribe:"<<this->connectWidget->getTopic();QMqttTopicFilter topic(this->connectWidget->getTopic());this->mqttClient->subscribe(topic);});
void MainWindow::mqttReadyReadSlot(const QByteArray &message, const QMqttTopicName &topic)
{qDebug()<<message;qDebug()<<topic;
}
4、连接服务器
this->mqttClient->setHostname(para1);this->mqttClient->setPort(para2.toInt());this->mqttClient->setClientId(para3);this->mqttClient->setUsername(para4);this->mqttClient->setPassword(para5);this->mqttClient->setKeepAlive(1000);this->mqttClient->setProtocolVersion(QMqttClient::MQTT_3_1);this->mqttClient->connectToHost();
对应的参数在腾讯云上查看
5、订阅topic
qDebug()<<"subscribe:"<<this->connectWidget->getTopic();QMqttTopicFilter topic(this->connectWidget->getTopic());this->mqttClient->subscribe(topic);
连接成功后订阅:
connect(this->mqttClient,&QMqttClient::connected,this,[=](){qDebug()<<"subscribe:"<<this->connectWidget->getTopic();QMqttTopicFilter topic(this->connectWidget->getTopic());this->mqttClient->subscribe(topic);});