为了在Qt里装一个MQTT库,我看了好多教程,好多都是比较老的Qt版本,要么就是讲的不太清楚。虽然整个过程都差不多,不过为了照顾啥都不懂的小白
(比如我),写一整个流程还是很有必要的。
目录
一、安装Qt
二、下载Qt官方MQTT库
三、本地CMake编译
四、Qt 安装 QtMqtt 模块
1. bin文件夹
2. include 文件夹(有后续操作)
3. lib文件夹
4. mkspecs\modules 文件夹
5. modules 文件夹
6. include 文件夹后续操作
五、MQTT模块使用
六、补充:在工程项目中部署Mqtt库
1. lib 文件夹
2. include 文件夹
3. 添加库
教程一堆,这里不做过多赘述,如果走官方下载途径的话,选择开源版本的就可以。官方下载网站一步到位:Download Qt OSS: Get Qt Online Installer
其中可能需要选择下载的组件,我是参考了下面这篇博客,跟着文章里面选择组件即可。【Qt安装教程(Qt 6.4)_一只羊_的博客-CSDN博客】
官方github仓库连接:qt/qtmqtt: Qt Module to implement MQTT protocol version 3.1 and 3.1.1 http://mqtt.org/ (github.com)
克隆到本地文件夹中,最好文件目录不包含中文:
然后切换git分支,切换到和Qt版本相同的分支, 这里我们切换到6.5.2。
git branch -a # 查看所有分支,退出阅读按个Q键就行
git checkout remotes/origin/6.5.2 # 切换至6.5.2分支
接下来,我们使用Qt打开这个项目。打开Qt后点击“打开项目”,在选定文件的时候选择刚刚克隆的官方库中的CMakeLists.txt。
然后正常配置项目。
打开项目后,我们切换到Release构建模式。
在等待右下角的进度条完成以后,我们点击左下角的小锤子进行构建。
我这里构建是没有任何报错的,一路绿灯,事实上正常下载官方的Qt基本上都没什么问题。
在编译完成后,于代码的同级目录下出现了如下编译文件夹:
我们打开带有Release后缀的文件夹,然后再打开Qt安装时选择的安装目录,将Release中部分有用的文件迁移到Qt的安装目录中。我的安装目录是:D:\Qt_code\6.5.2\mingw_64(别问为什么装到带code的文件夹里,问就是手滑)
将bin文件夹中的Qt6Mqtt.dll文件移动到Qt bin文件夹中
将include文件夹中的QtMqtt文件夹整个移动到Qt include文件夹中。
注意,当我们打开QtMqtt文件夹后,我们会发现很多头文件(.h),我们随便打开一个头文件,会发现其中的内容是下边这样:
#include "../../../qtmqtt/src/mqtt/qmqttauthenticationproperties.h"
居然在include源代码中的内容,这是有问题的!我们之后会对其进行修改,现在先不着急。
将lib文件夹中的内容按照格式移动到Qt lib文件夹中。具体包含:
文件夹:\lib\cmake\Qt6Mqtt → \lib\cmake
文件:\lib\pkgconfig\Qt6Mqtt.pc → \lib\pkgconfig
文件:\lib\libQt6Mqtt.a → \lib
文件:\lib\Qt6Mqtt.prl → \lib
两个目录下的 mkspecs 文件夹都打开至 mkspecs\modules ,将里面的文件全部移动到Qt的安装目录中。
将modules文件夹中的Mqtt.json文件移动到Qt modules文件夹中。
我们刚刚说过,我们移动过去的 include/QtMqtt 中的头文件是有问题的!刚刚我们随机打开了其中一个头文件,其中内容如下:
#include "../../../qtmqtt/src/mqtt/qmqttauthenticationproperties.h"
既然它这么include,那我们就去对应目录看看是个什么情况。
一打开,哦,原来是我们刚刚克隆的官方的代码。于是我们将刚刚include文件夹中的所有头文件(.h)全部替换成正版的头文件。原来错误的include文件夹中有什么头文件,我们就替换什么。我所处的6.5.2版本所有头文件如下:
qmqttauthenticationproperties.h
qmqttclient.h
qmqttconnectionproperties.h
qmqttglobal.h
qmqttmessage.h
qmqttpublishproperties.h
qmqttsubscription.h
qmqttsubscriptionproperties.h
qmqtttopicfilter.h
qmqtttopicname.h
qmqtttype.h
qtmqttexports.h
qtmqttversion.h
至此,安装过程到此结束。
官方使用文档:Qt MQTT 6.5.2
如果你和我一样,使用的是qmake,那么只需要在.pro中添加 QT += mqtt 就可以使用了。我们刚刚克隆的官方代码中也包含一些样例,在开发时我们都可以参考使用。目录为:qtmqtt\examples\mqtt。
注意,在使用MQTT通信的时候,切记:不要开代理!不要开代理!不要开代理!我之前因为这个被搞了好长时间没找到问题(悲)
除了在Qt中直接安装库,一劳永逸以外,我们也可以在项目中部署Mqtt库。简单的流程如下:
我们打开需要部署的工程项目的文件夹,将第三步编译后产生的Release文件夹中的lib文件夹整个复制到工程项目文件夹中去。这里我随便选了个“JsonSender”的工程项目。
我们先在工程文件夹中新建 include 文件夹。
然后找到刚刚克隆的源代码,找到 qtmqtt/src/mqtt/ 这样的目录(没错,这个目录就是咱们之前在【四、5. include 文件夹后续操作】中查到的目录),将其中的所有头文件(.h)全部复制到刚刚我们新建的 include 文件夹中。
然后我们在Qt中打开刚刚的工程项目,右击左边的项目文件夹,点击“添加库”
这里我们选择外部库
库文件和包含路径选中我们刚刚添加的内容,点击下一步进入汇总,点击完成即可
如此一来,我们就完成了项目部署。之后在这个项目中使用时,我们只需要尽情 include 即可。