QT——移植官方MQTT库

1.软件版本

QT5.12.10

Win11

mingw

2.概述

        Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码。那么,这里先来介绍第一种,如基于Qt官方提供的封装来使用MQTT。

        Qt官方虽然在2017年就已经提供了对MQTT的封装,但是并没有正式加入到Qt的标准库里面,所以需要自己下载源码进行编译。

Qt官方介绍文档地址:https://doc.qt.io/QtMQTT/qtmqtt-index.html

3.下载

        首先要下载官方源码,注意一定要对应自己的qt版本否则容易出现库和软件不兼容情况。
Qt官方在github上提供了源代码,地址:https://github.com/qt/qtmqtt

我这里由于QT版本是5.12.10,所以找了5.12.10的官方库

重点!!!

        目录下.pro文件极为重要,需要它来编译产生后面移植所需要的库。我这里找的是可以直接编译qt的pro文件版本的,默认下载的是dev开发版本,需要cmake编译才出现pro文件。不会cmake的可以在github左上角切换分支找到有pro文件的开发版本来下载

4.编译

        下载源码后得到如下文件,直接打开工程文件准备编译。(默认下载的是dev开发版本,需要cmake编译才出现pro文件。不会cmake的可以在github左上角切换分支找到有pro文件的开发版本来下载)

注意,编译这个源码需要安装perl,否则会报错:perl 不是内部或外部命令,也不是可运行的程序。

perl下载地址:https://www.perl.org/get.html
官网下载速度比较慢,我上传到网盘了,可以在这里下载:

链接:https://pan.baidu.com/s/1p5YOo-FU-ZLJUtuZSN0Rjg 提取码:i0dm

安装完Perl后会自动写入环境变量, 这时候再次编译(Release模式)QtMqtt源码,编译完成后得到以下文件:

 

 接下来就可以将mqtt部署到自己的Qt项目中了。

4.部署到Qt项目

        编译出来的Qt Mqtt库,要使用它有两种方式,一种是直接在项目中导入外部库和头文件,还有一种是将其以模块的形式部署到Qt的安装目录,其中第二种的好处就是,只需要做一次操作,以后需要再用Mqtt库就可以直接调用了,不需要每次都导入外部库。这里介绍第二种。

4.1部署到Qt安装目录

        如何将QtMqtt的库直接部署到Qt安装目录中,这样只需要部署一次,以后在任何工程中引用都不需要再额外导入库了,相比第一种来说更方便些。

首先,将qtmqtt源码目录下(qtmqtt\src\mqtt)的所有.h头文件拷贝,Qt安装目录下的include文件夹中创建一个QtMqtt目录文件夹,将拷贝的文件粘贴进去。(注:这个文件夹命名可以随便改,但是一定要记住,因为后面要用到。)

 ​​​​​

4.2使用编译成功的QtMqtt动态链接库

然后,将源码编译生成(Debug或者Release都行)目录下的lib中以下4个文件拷贝

并粘贴到Qt安装目录下的lib文件夹中去:

 在这里插入图片描述

 接下来将源码编译生成的两个库文件拷贝到Qt安装目录的bin和lib中:

最后再拷贝模块配置文件到Qt安装目录中

在这里插入图片描述

在这里插入图片描述

这两张图片直接照搬别人的博客,懒得弄。。。

ok,配置完毕,这种方式配置在新建工程中引用只需要引入模块就可以直接使用了

5.引入mqtt库

在工程的pro文件中这里需要加一个network

QT += network

添加QtMqtt库

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQt5Mqtt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQt5Mqttd

添加头文件inlcude

INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

6.使用QMqttClient连接MQTT服务器

在.c和.h里引入头文件

#include "QtMqtt/qmqttclient.h"

这里的QtMqtt就是我们上面操作的文件夹名称,如果我们改了文件夹名就换上去就行了。

在.h文件里初始化QMqttClient对象、异步连接回调、接收消息异步回调

protected:
     QMqttClient *pMqttClient;//mqtt服务器对象
protected slots:
    void connected_isr();//连接回调函数
private slots:
    void recv_message(QByteArray message);//接收消息回调

.c文件主函数

pMqttClient=new QMqttClient(this);    //实例化QMqttClient对象

pMqttClient->setHostname(IP地址);    //连接mqtt服务器
pMqttClient->setPort(1883);
pMqttClient->connectToHost();

connect(pMqttClient,&QMqttClient::connected,    //连接异步槽
                this,&Widget::connected_isr);
connect(pMqttClient,&QMqttClient::messageReceived,
                this,&Widget::recv_message);

//成功连接回调
void Widget::connected_isr()
{
    qDebug()<<"Connected successfully!";
    pMqttClient->subscribe(QMqttTopicFilter("test"));//订阅频道
}
//收到消息回调
void Widget::recv_message(QByteArray message)
{
    qDebug()<<message;
}

发布订阅消息

 QString topic="test";//发布的频道
 QString payload="123456";//消息内容体
 pMqttClient->publish(QMqttTopicName(topic),payload.toLocal8Bit());//发布消息

 pMqttClient->subscribe(QMqttTopicFilter("test"));//订阅频道

7.效果图

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好!关于在Ubuntu上使用QtMQTT,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Qt开发环境和MQTT。可以使用以下命令在Ubuntu上安装Qt: ``` sudo apt-get install build-essential qt5-default ``` 安装MQTT可以使用以下命令: ``` sudo apt-get install libmosquitto-dev ``` 2. 创建一个新的Qt项目。你可以使用Qt Creator来创建一个空白项目或者选择适合你的项目模板。 3. 在Qt项目中添加MQTT的依赖。在.pro文件中添加以下行: ``` LIBS += -lmosquitto ``` 4. 在代码中引入MQTT的头文件,并使用MQTT功能。下面是一个简单的示例代码,用于连接到MQTT代理并发布和订阅主题: ```cpp #include <QCoreApplication> #include <mosquitto.h> void onConnect(struct mosquitto *mosq, void *obj, int rc) { if (rc == 0) { qDebug() << "Connected to MQTT broker"; mosquitto_subscribe(mosq, NULL, "topic", 0); // 订阅主题 mosquitto_publish(mosq, NULL, "topic", 5, "message", 0, false); // 发布消息 } else { qDebug() << "Failed to connect to MQTT broker"; } } void onMessage(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) { qDebug() << "Received message:" << (char *)message->payload; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); struct mosquitto *mosq; mosquitto_lib_init(); mosq = mosquitto_new(NULL, true, NULL); mosquitto_connect_callback_set(mosq, onConnect); mosquitto_message_callback_set(mosq, onMessage); mosquitto_connect(mosq, "localhost", 1883, 60); return a.exec(); } ``` 5. 编译和运行你的Qt项目。 这样,你就可以在Ubuntu上使用QtMQTT进行开发了。请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行更多的配置和代码编写。希望对你有所帮助!如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值