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,到此完成移植
                










