【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

【QT的学习】在QT中如何使用MQTT_第1张图片

(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

你可能感兴趣的:(QT,linux)