QT学习笔记-编译部署QtMQTT

本文详细介绍了如何在Windows环境下编译和部署Qt MQTT模块,包括下载QT,选择正确的Perl选项,下载QtMQTT源码,编译源码,复制头文件和库文件到相应目录,以及配置Qt环境以使用MQTT模块。通过这些步骤,开发者可以将MQTT功能整合到Qt应用程序中,实现MQTT协议的通信。
摘要由CSDN通过智能技术生成

准备工作

下载安装QT

如果需要重新安装QT,在安装过程中,要把Perl给选中,如果不选中,编译时会报错。
在这里插入图片描述

下载Qt MQTT模块

点此下载
下载时,注意选择与所安装QT版本一致的分支。

编译Qt MQTT模块

解压

将下载下来的qtmqtt压缩包解压到合法路径下

复制相关头文件

1)在QT安装目录下,选择对应的QT版本和常用的编译器,笔者常用 MSVC 2017 32-bit,选择进入此编译版本文件夹并进入include文件夹,在此目录下新建QtMqtt文件夹。
2)将**.\src\mqtt**文件夹中的所有.h的文件全部复制到(1)中的QtMqtt文件夹内。如果不复制可能会报错。报错如下:error: QtMqtt/qmqttglobal.h: No such file or directory

打开工程

直接双击解压文件夹下的qtmqtt.pro文件打开,会出现个弹窗让选择编译环境,选择常用的即可。
在这里插入图片描述
在这里插入图片描述

编译工程

选择Release版本,然后点击编译(也就是点击最下面的小锤子)。等待编译完成。
完成后在同级目录下生成.\build-qtmqtt-Desktop_Qt_5_12_10_MSVC2017_32bit-Release
在这里插入图片描述

部署Qt MQTT模块

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

头文件(include)

1.在编译时,我们已经复制过,此处再次复制编译后目录中的include文件夹内QtMqtt文件夹到编译器版本下的include文件夹内,主要是有个QtMqttDepends文件;
2.回到编译源码中,复制qtmqtt\src\mqtt\目录下的所有".h“文件,不包含结尾为”_p.h“头文件,到\Qt\Qt5.12.10\5.12.10\目录下对应的编译器版本中的include目录下的QtMqtt文件夹中,提示已经存在选择覆盖.
3.回到编译源码中,复制qtmqtt\src\mqtt\目录下的所有”_p.h"文件,到\Qt\Qt5.12.10\5.12.10\目录下对应的编译器版本中的include目录下的QtMqtt\5.12.10\QtMqtt\private文件夹中,提示已经存在选择覆盖.

库文件(lib)

将编译后的文件夹下的lib文件和prl文件复制到常用编译环境下的lib文件夹下。
复制lib文件夹中的cmake\Qt5Mqtt\整个目录到常用编译环境下的lib\cmake\目录中
在这里插入图片描述

动态库文件/运行库文件(dll)

将mqtt编译出来的bin目录下的2个dll拷贝到常用编译环境下的bin文件夹下。
(注意:bin下的2个dll其实与lib下的2个dll是一模一样的)

模块配置文件

将mqtt编译出来的mkspecs\modules-inst\下的pri文件拷贝到安装目录常用编译环境下的mkspecs/modules中

引用QtMQTT

经过以上配置,后续开发使用mqtt模块只需完成以下两个步骤

引入模块:

QT += mqtt

包含头文件

#include <QtMqtt/QtMqtt>

使用官方DEMO

为了方便演示,我们直接使用Qt Mqtt源码中自带的simpleclient示例来编译运行。
这个示例Qt官方有详细介绍的,https://doc.qt.io/QtMQTT/qtmqtt-simpleclient-example.html
将该示例打开,有个地方需要改一下,打开Pro文件
在这里插入图片描述
将以上两行注释掉,要不然会有依赖,无法独立运行。
编译无错,直接运行。

尝试通信

根据官方文档,选择broker.hivemq.com进行测试连接。

后续使用

后续使用可参考文档,使用 QMqttClient类进行

MQTT(Message Queue Telemetry Transport)是一种轻量级的消息传输协议,适用于物联网设备与服务器之间的数据传输,具有低带宽、低功耗、高可靠性等特点。Qt是一种跨平台的C++图形界面应用程序开发框架,具有简单易学、代码简洁、易于维护等优点,可以用来实现MQTT客户端。下面将介绍如何在Qt中实现MQTT客户端。 1.安装MQTTQt没有自带MQTT库,需要手动安装第三方库。可以选择paho.mqtt.c或eclipse.mosquitto等开源MQTT库,这里以paho.mqtt.c为例。下载并解压paho.mqtt.c库,将其包含到Qt项目中,同时在.pro文件中添加如下语句: INCLUDEPATH += $$PWD/paho.mqtt.c/include LIBS += -L$$PWD/paho.mqtt.c/build/output -lpaho-mqtt3as-static 2.实现MQTT客户端 在Qt中实现MQTT客户端,需要用到MQTT库中的头文件和API函数。下面以订阅主题为例,展示如何在Qt中实现MQTT客户端: #include <stdio.h> #include <stdlib.h> #include <string.h> #include "MQTTClient.h" #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientSub" #define TOPIC "sample/topic" #define QOS 1 #define TIMEOUT 10000L volatile MQTTClient_deliveryToken deliveredtoken; void delivered(void *context, MQTTClient_deliveryToken dt) { printf("Message with token value %d delivery confirmed\n", dt); deliveredtoken = dt; } int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message) { printf("Message arrived\n"); printf(" topic: %s\n", topicName); printf(" message: %.*s\n", message->payloadlen, (char*)message->payload); MQTTClient_freeMessage(&message); MQTTClient_free(topicName); return 1; } void connlost(void *context, char *cause) { printf("\nConnection lost\n"); printf(" cause: %s\n", cause); } int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; int rc; MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered); if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } MQTTClient_subscribe(client, TOPIC, QOS); printf("Subscribed to topic %s\n", TOPIC); getchar(); MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } 3.编译运行MQTT客户端 将以上代码保存为main.c文件,运行以下命令编译生成可执行文件: gcc -o main main.c -lpaho-mqtt3as 运行可执行文件即可实现MQTT客户端的订阅功能。 以上就是利用Qt实现MQTT客户端的步骤。通过第三方MQTT库和Qt的API函数,可以方便地实现MQTT客户端的开发,适用于物联网等领域的数据传输和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值