准备工作

下载安装QT

如果需要重新安装QT,在安装过程中,要把Perl给选中,如果不选中,编译时会报错。

Qt 编译Kdgantt的Demo qt编译步骤_Qt 编译Kdgantt的Demo

下载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文件打开,会出现个弹窗让选择编译环境,选择常用的即可。

Qt 编译Kdgantt的Demo qt编译步骤_QT_02


Qt 编译Kdgantt的Demo qt编译步骤_编译环境_03

编译工程

选择Release版本,然后点击编译(也就是点击最下面的小锤子)。等待编译完成。

完成后在同级目录下生成.\build-qtmqtt-Desktop_Qt_5_12_10_MSVC2017_32bit-Release

Qt 编译Kdgantt的Demo qt编译步骤_QT_04

部署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\目录中

Qt 编译Kdgantt的Demo qt编译步骤_QT_05

动态库文件/运行库文件(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文件

Qt 编译Kdgantt的Demo qt编译步骤_Qt 编译Kdgantt的Demo_06


将以上两行注释掉,要不然会有依赖,无法独立运行。

编译无错,直接运行。

尝试通信

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

后续使用

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