前言
前端时间做了一个项目,要求在PC端使用QT制作一个客户端,用来接收从单片机上传到Onennet的数据,并且还要下发指令。当时弄了好几天,中途遇见了非常多的问题,所以写下这篇文章记录一下,同时分享一下自己的经验。
我的环境:QT 5.12.6
难点
总结下我遇见的难点:
1,环境配置极难,当时光环境配置这一项就弄了我好几天
Qt在5,10版本开始支持mqtt,但是也没有集成到安装包里面,需要自己下载编译。Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码
下载
Qt官方在github上提供了源代码,地址:https://github.com/qt/qtmqtt
第三方的mqtt库GitHub地址:https://github.com/emqx/qmqtt
在下载官方库文件时需要注意,要下载与自己版本相符合的程序源码,像我是5.12.6版本的QT。我就要下载5.12.6版本的mqtt库文件
环境搭建
第一步,编译构建qmqtt源码
下面我们使用第三方的MQTT库来进行环境搭建,第三方公司的MQTT库环境搭建过程与官方库的环境搭建过程基本上都是相同的步骤,只是他们两方的头文件名字不太一样而已。
将第三方的源码下载后点击qmqtt.pro
出现这个界面点红框即可
后面直接点击左下角的小锤子进行构建
有时候可能会出现构建失败的提示,这也是我花费时间最多的地方,当时找了许多教程都没弄清楚
问题
你出现这个现象可能有一下几个原因:
1,需要安装一个perl
perl下载地址:https://www.perl.org/get.html
2,你可能需要使用release模式进行构建
点击左下角的这个小显示器形的图标就可以调节模式
3,你的QT版本太低,不支持
这时候下载一个更新的,5.10以上版本的
4,此时开始编译后会出现如下类型错误
接下来我们将源码路径下C:\Users\maogu\Desktop\qtmqtt-5.10\src\mqtt 的所有头文件复制,
粘贴到C:\Users\maogu\Desktop\build-qtmqtt-Desktop_Qt_5_10_1_MSVC2013_64bit-Release\include\QtMqtt路径中,
我在include文件夹中已经建好QtMqtt文件夹,(以上路径仅作参考)
最后一步还要在QtMqtt文件夹下建立private文件夹,将名称为*_p.h的四个头文件存放进去。
5,之后若是还出现以下问题
这时,我们将所有错误的包含文件名换为相应*.h文件,如下:
之后就可以正常编译了
构建完成后你会得到一个文件夹
第二步:部署到QT项目
这里有两种方法进行环境配置,
第一种是直接在项目中导入外部库和头文件。
第二种是将其以模块的形式部署到QT的安装目录。
其中第二种的好处就是,只需要一次操作,以后需要再用MQTT库就可以直接调用了,不用每次都导入外部库
所以在这里我们主要演示第二种
首先,将qmqtt源码目录下(qmqtt\src\mqtt)的所有.h后缀的头文件拷贝,然后打开QT安装目录下的include文件夹,创建一个mqtt目录,将拷贝的头文件粘贴进去
我的文件目录如下:D:\QT\5.12.6\mingw73_64
注意:当你的QT安装了不同的编译环境时会有
之后,将源码编译生成目录下的lib中以下6个文件拷贝
并粘贴到QT安装目录下对应环境的lib文件夹去
例如D:\QT\5.12.6\mingw73_64\lib
接下来将源码编译生成的bin文件夹下两个库文件拷贝到Qt安装目录的bin中:
之后将编译构建得到的目录下的\mkspecs\modules-inst中的文件复制到QT对应安装目录中
这样就配置完成了
以这种方式配置的在新工程中引用只需要引入模块就可以直接使用了
QT += mqtt
包含头文件
#include <QtMqtt/QtMqtt>
问题
在我配置好使用过程中出现了一下问题:
1,头文件不对
这时候查看你刚刚添加的头文件具体名字,官方库和第三方库的头文件名并不相同
2,显示找不到头文件
这时尝试自己导入文件试试
新建一个项目,在项目的.pro文件中右键,点击添加库
选择外部库
选择库文件,找到QT安装目录相应环境下的lib文件
之后再次运行应该就没有问题了
接下来就是正式的客户端开发了,将会在我下一篇博客发出,敬请期待