【QT的学习】在QT中如何使用MQTT

本文档详细介绍了如何在Ubuntu 16.04的QT环境中加载和使用qtmqtt库,以便在QT程序中实现MQTT连接物联网。首先从GitHub下载qtmqtt源码,选择合适的qt版本分支,然后通过qmake和make进行编译安装。安装完成后,可在QT安装目录下找到qtmqtt。在QT程序中,通过添加MQTT模块,设置QMqttClient参数,连接到MQTT broker,并实现连接状态和消息接收的信号槽函数。最后,展示了如何订阅和发布MQTT消息,强调了查阅官方文档和理解MQTT API的重要性。

背景:在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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值