【QT的学习】在QT中如何使用MQTT
·
背景:在ubuntu16.04(linux)中,要在qt程序中使用MQTT连接IOT,因此qt程序要加载MQTT。本方法采用的MQTT是QT官方自带的qtmqtt,只不过目前没有放在QT库的安装包中,需要自行下载源码编译
一:在qt中加载MQTT方法:
(1)下载qtmqtt:https://github.com/qt/qtmqtt
git clone https://github.com/qt/qtmqtt.git
(2)因为qtmqtt也有很多的分支对应不同的qt版本,因此选了qt5.12.5分支(自己本机qt版本)
git checkout 5.12.5
git branch -a
* 5.12.5
dev
(3)开始编译(命令行方式一步到位,可以将qtmqtt直接安装在qt的安装目录)
cd qtmqtt
qmake
make
make install
安装完成后,可以再qt的安装目录下看到qtmqtt
(4)截止到现在可以直接使用qtmqtt库了
二 在QT程序中使用qtmqtt的库函数,建立连接,并发布或者订阅信息(下面仅作为某个客户端连接broker进行发布订阅)
关于qtmqtt的的类使用可见官方帮助文档(里面也有例子):https://doc-snapshots.qt.io/qtmqtt-dev/index.html
(1)在pro文件中加上mqtt,例如
QT += qml quick mqtt
(2)使用QMqttClient进行连接,设置参数
mqttClient = new QMqttClient(this);
/*设置主机地址*/
mqttClient->setHostname(hostName);
/*设置端口号*/
mqttClient->setPort(hostPort);
/*设置mqtt协议版本*/
mqttClient->setProtocolVersion(QMqttClient::MQTT_3_1_1);
/*设置client id*/
mqttClient->setClientId(deviceId);
/*设置 MQTT 连接所需的用户名及密码*/
mqttClient->setUsername(mqttUserName);
mqttClient->setPassword(mqttPassWord);
/*连接状态信号槽*/
connect(mqttClient, &QMqttClient::stateChanged, this, &Mqtt::mqttClientStateChangeSlot);
/*订阅信息*/
connect(mqttClient, &QMqttClient::messageReceived, this, &Mqtt::mqttClientMessageReceivedSlot);
/*开始连接*/
mqttClient->connectToHost();
(2)连接成功后,client的状态会对应的发生变化,发送信号槽:stateChanged,在槽函数中mqttClientStateChangeSlot可以进行一些处理:
//订阅信息
if(QMqttClient::Connected == clientState)
{
mqttClient->subscribe(topicName);
}
订阅后,收到的消息通过信号:messageReceived触发,在槽函数mqttClientMessageReceivedSlot中对订阅消息进行处理
(3)也可以进行发布信息:
QString topicName = $XXXX;
QByteArray message = "XXXXXXX";
mqttClient->publish(QMqttTopicName(topicName), message)
qt加载qtmqtt的关键还是要看qt官方帮助文档以及了解mqtt相关api
更多推荐
已为社区贡献6条内容
所有评论(0)