Linux Qt下MQTT模块的导入(编译成库版本)几乎适用所有版本

Windows下 MQTT源码移植(几乎所有的Qt版本都适用) 链接
Linux Qt下MQTT模块的导入(源码移植) 链接

前言

环境:ubuntu16.04
Qt版本:5.12.9


提示:以下是本篇文章正文内容,下面案例可供参考

MQTT 源码下载

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

一、采用windows共享文件编译出错(ln: 无法创建符号链接 lib*.so : 不支持的操作)

在这里插入图片描述

由于在linux下编译dll工程时,无法生成*.so、.so.5、.so.5.12文件,只生成了*.so.5.12.9。报的错误是“ ln: 无法创建符号链接’lib*.so’: 不支持的操作”。
这个错误原因是:windows只能在NTFS文件系统创建硬链接,而且只有在同一文件系统中的文件才能创建硬链接。编译的dll工程源代码放在了windows和linux虚拟机的共享目录里。共享目录所在的文件系统和linux的文件系统并不是同一个文件系统,故而不能创建硬链接。将dll工程源代码移动到linux系统的文件夹中即可解决。

二、将下载的mqtt-master拷贝到ubunut下,这里我cp到桌面:

cp -R qmqtt-master/ ~/Desktop/

在这里插入图片描述

1.进入到qmqtt-master目录

cd qmqtt-master/

2.修改 .qmake.conf 如下:

load(qt_build_config)
CONFIG += warning_clean
MODULE_VERSION = 5.12.9

在这里插入图片描述

3.创建 build目录 mkdir build/

mkdir build/
cd build/

在这里插入图片描述

4.进入 build目录 执行 qmake … --> make -j4

qmake .. 
make -j4

在这里插入图片描述
在这里插入图片描述

5.编译完成

在这里插入图片描述
在这里插入图片描述

二、导入工程验证

1.新建QmqttDemo工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.在工程目录下创建 lib目录

在这里插入图片描述

2.1 将如图文件拷贝到新建的lib目录下

在这里插入图片描述
在这里插入图片描述

3.新建include 将qmqtt-master/src/mqtt所有.h拷贝到 QmqttDemo/lib/include 下

在这里插入图片描述

4.通过工程配置qmqtt库 ---- QmqttDemo.pro 内容如下:

QT += core gui network
INCLUDEPATH += lib/include
#这里很重要,没有它会报头文件找不到错误

QT       += core gui network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h



FORMS += \
    widget.ui

INCLUDEPATH += lib/include

#LIBS+= -L/usr/local/lib  \
LIBS+= -L/$$PWD/lib \
        -lQt5Qmqtt

# Default rules for deployment.
qnx: target.path = /tmp/$${
    
    TARGET}/bin
else: unix:!android: target.path = /opt/$${
    
    TARGET}/bin
!isEmpty(target.path): INSTALLS += target

5 关键代码

void Widget::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 = "604***658"; // 设备 ID
    QString productId = "354*15";   // 产品 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 Widget::onMQTT_Received( QMQTT::Message message) {
    
    
    QString str = message.payload();
    qDebug() <<"rcive: " << message.topic() << ":" <<str;

}

三、验证结果

  1. 发布 pulish
    在这里插入图片描述
    2.received
    在这里插入图片描述

源码工程

在这里插入图片描述
在这里插入图片描述

源码工程下载 下载

猜你喜欢

转载自blog.csdn.net/wct3344142/article/details/121485719