Qt 下 MQTT模块的导入(源码导入)

  • ​​MQTT 源码下载​​
  • ​​解压下载的包然后找到src/mqtt文件夹 ,copy到工程路径下​​
  • ​​在工程中添加一系列的 mqtt 的源码文件​​
  • ​​接下就是一系列的改错(不报错说明就没错)​​
  • ​​下面就以oneNet平台来做个测试​​

Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本 ​​链接​​ Windows下 MQTT源码移植(几乎所有的Qt版本都适用) 链接
Qt下MQTT模块的导入(源码直接导入)适用Windows和Linux系统 连接


这里介绍最实用最方便快捷的办法,该方法有点冗余简洁版可参见 ​​点击这里​​


MQTT 源码下载

​下载地址​​ ------下载的要是mqtt-master

Linux Qt下MQTT模块的导入(源码移植)_linux

解压下载的包然后找到src/mqtt文件夹 ,copy到工程路径下

Linux Qt下MQTT模块的导入(源码移植)_MQTT_02


此路径为新建的工程路径,mqtt_test_00 为我的工程名

Linux Qt下MQTT模块的导入(源码移植)_MQTT_03

在工程中添加一系列的 mqtt 的源码文件

选中所有的.h文件添加到工程中(在工程中右键添加选择现有项)

Linux Qt下MQTT模块的导入(源码移植)_代理服务器_04

选中所有的.cpp文件添加到工程中

Linux Qt下MQTT模块的导入(源码移植)_代理服务器_05

接下就是一系列的改错(不报错说明就没错)

首先在.pro文件中添加 QT += network

Linux Qt下MQTT模块的导入(源码移植)_MQTT_06


然后在.h文件中添加几个头文件

Linux Qt下MQTT模块的导入(源码移植)_物联网_07


Debug运行工程

    出现第一个错误,鼠标双击错误

Linux Qt下MQTT模块的导入(源码移植)_物联网_08


    把头文件的<> 改为 “” 即可

Linux Qt下MQTT模块的导入(源码移植)_物联网_09

    再次Debug运行工程,出现错误,鼠标双击错误

Linux Qt下MQTT模块的导入(源码移植)_物联网_10

    把头文件的<> 改为 “” 即可

Linux Qt下MQTT模块的导入(源码移植)_linux_11

实在是太难得截图啦啦啦啦啦啦啦啦啦,一直这样重复操作直到没错误为止,如下图:

Linux Qt下MQTT模块的导入(源码移植)_物联网_12


​**值得说明的是,在qt5.9.x下没得成功,在 5.7.0 5.5.1 下亲自测试有用,可成功**​

下面就以oneNet平台来做个测试

Linux Qt下MQTT模块的导入(源码移植)_代理服务器_13


关键连接代码

void MqttTest::clientMqtt(){
client = new QMQTT::Client(); // 初始化QMQTT客户指针

connect(client, SIGNAL(received(QMQTT::Message)),this, SLOT(onMQTT_Received(QMQTT::Message)));


oneNet server ///

QHostAddress host("183.230.40.39"); // 代理服务器 IP
QByteArray password = "test"; // 设备名称
quint16 port = 6002; // 代理服务器端口
QString deviceId = "604219658"; // 设备 ID
QString productId = "354215"; // 产品 ID

client->setKeepAlive(120); // 心跳
client->setHost(host); // 设置 EMQ 代理服务器
client->setPort(port); // 设置 EMQ 代理服务器端口
client->setClientId(deviceId); // 设备 ID
client->setUsername(productId); // 产品 ID
client->setPassword(password);
client->cleanSession();
client->setVersion(QMQTT::MQTTVersion::V3_1_1); // 设置mqtt版本


client->connectToHost(); // 连接 EMQ 代理服务器

QTimer::singleShot(1000, this, [=](){
client->subscribe("abcd",0); // 订阅abcd
});
}

void MqttTest::onMQTT_Received( QMQTT::Message message)
{
QString str = message.payload();
qDebug() <<"rcive: " << message.topic() << ":" <<str;

}

运行上述程序后可以看见对应的设备处于在线状态了

Linux Qt下MQTT模块的导入(源码移植)_MQTT_14

windows使用MQTT Simuiate Device 连接 设备 test01

Linux Qt下MQTT模块的导入(源码移植)_MQTT_15


连接成功

Linux Qt下MQTT模块的导入(源码移植)_代理服务器_16


Linux Qt下MQTT模块的导入(源码移植)_QMQTT_17

客户端发布一个Topic

Linux Qt下MQTT模块的导入(源码移植)_QMQTT_18

OK,到此完成移植