Linux Qt下MQTT模块的导入(源码移植)
原创
©著作权归作者所有:来自51CTO博客作者qq63a17a25c2b1c的原创作品,请联系作者获取转载授权,否则将追究法律责任
Qt 下 MQTT模块的导入(源码导入)
- MQTT 源码下载
- 解压下载的包然后找到src/mqtt文件夹 ,copy到工程路径下
- 在工程中添加一系列的 mqtt 的源码文件
- 接下就是一系列的改错(不报错说明就没错)
- 下面就以oneNet平台来做个测试
Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本 链接 Windows下 MQTT源码移植(几乎所有的Qt版本都适用) 链接
Qt下MQTT模块的导入(源码直接导入)适用Windows和Linux系统 连接
这里介绍最实用最方便快捷的办法,该方法有点冗余简洁版可参见 点击这里
MQTT 源码下载
下载地址 ------下载的要是mqtt-master
解压下载的包然后找到src/mqtt文件夹 ,copy到工程路径下
此路径为新建的工程路径,mqtt_test_00 为我的工程名
在工程中添加一系列的 mqtt 的源码文件
选中所有的.h文件添加到工程中(在工程中右键添加选择现有项)
选中所有的.cpp文件添加到工程中
接下就是一系列的改错(不报错说明就没错)
首先在.pro文件中添加 QT += network
然后在.h文件中添加几个头文件
Debug运行工程
出现第一个错误,鼠标双击错误
把头文件的<> 改为 “” 即可
再次Debug运行工程,出现错误,鼠标双击错误
把头文件的<> 改为 “” 即可
实在是太难得截图啦啦啦啦啦啦啦啦啦,一直这样重复操作直到没错误为止,如下图:
**值得说明的是,在qt5.9.x下没得成功,在 5.7.0 5.5.1 下亲自测试有用,可成功**
下面就以oneNet平台来做个测试
关键连接代码
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;
}
运行上述程序后可以看见对应的设备处于在线状态了
windows使用MQTT Simuiate Device 连接 设备 test01
连接成功
客户端发布一个Topic
OK,到此完成移植