QT添加MQTT库

QT添加MQTT库

软件汇总

安装包采用官网下载的方式,当然,如果官网下载太慢的话,可以点击我准备的网盘链接,但是请注意版本问题,我个人提供的网盘链接中的版本可能不是最新版。以下奶牛快传链接为我个人提供。

QT在线安装包

我个人建议使用 QT 的在线安装方式安装,在更换镜像源之后的下载速度可以达到 7MB/S,速度相当可观,如果是低版本的 QT 可以使用离线安装的方式。

图片[1]-QT添加MQTT库-昕某人の博客

图片[2]-QT添加MQTT库-昕某人の博客

镜像源更换软件 Fiddler5

此软件不是必须品,仅仅是为了加速 QT 的下载速度。

图片[3]-QT添加MQTT库-昕某人の博客

第三方 Mqtt 库

本文采用第三方的mqtt库来实现mqtt通信,目前已经经过测试,没有使用问题。

图片[4]-QT添加MQTT库-昕某人の博客

  • 奶牛快传地址:qmqtt

开源mqtt服务端 emqx

后续我们需要测试mqtt库是否添加成功,所以需要在本地搭建一个测试环境,emqx就是一个开源的mqtt服务器应用。

图片[5]-QT添加MQTT库-昕某人の博客

MQTT 测试工具

测试工具也可以使用MQTT.fx,看个人喜好,这里推荐的是下面这个。

图片[6]-QT添加MQTT库-昕某人の博客

开启 Fiddler5 代理软件(可选)

打开 Fiddler5 软件:

图片[7]-QT添加MQTT库-昕某人の博客

在软件的最下方输入以下内容来开启下载代理:

urlreplace download.qt.io mirrors.ustc.edu.cn/qtproject/

图片[8]-QT添加MQTT库-昕某人の博客

上面这句话的意思就是将所有通过 download.qt.io 下载的地址更换成 mirrors.ustc.edu.cn/qtproject/

然后点击回车即可!

注意:在安装完成之前,请不要关闭此软件

安装 QT

windows11系统请使用管理员身份运行下载程序,在我电脑上,如果不以管理员身份打开的话,在选择 QT 版本的界面会卡死。

打开 QT 的在线安装程序:

图片[9]-QT添加MQTT库-昕某人の博客

登录你的 QT 账户,如果没有的话需要注册一个,QT 后续的几个版本都需要注册登录才能下载:

图片[10]-QT添加MQTT库-昕某人の博客

两个协议均勾选(如果你是商用,请仔细阅读一下):

图片[11]-QT添加MQTT库-昕某人の博客

点击 next,等待加载完成:

图片[12]-QT添加MQTT库-昕某人の博客

接下来的界面随便选一个即可(推荐选第二个,也就是不接受,不然可能给你发广告邮件):

图片[13]-QT添加MQTT库-昕某人の博客

选择安装位置:

图片[14]-QT添加MQTT库-昕某人の博客

接下来选择 QT 的版本和所需要的软件包:

图片[15]-QT添加MQTT库-昕某人の博客

这里简单说一下:

  • MSVC:MSVC 是用于 Windows 下 VS 编译器的软件包,如果你想用VS开发QT话这个是必选,一般没有必要勾选
  • MinGW:这是 GCC 的一个 Windows 移植版本,此工具必须选择,后续的开发基本都是使用的 minGW
  • Android:如果需要安卓开发的话,此项必须选择
  • 后面以 QT 开头的文件,推荐都选上,这样以后就不需要再回来下载了

然后一路点击 NEXT,下载即可,再开代理的情况下,速度可以达到 10MB/S。

验证安装

在 QT 中新建一个工程:

图片[16]-QT添加MQTT库-昕某人の博客

名称路径自己选择:

图片[17]-QT添加MQTT库-昕某人の博客

我这里选择 qmake 作为构建工具:

图片[18]-QT添加MQTT库-昕某人の博客

默认生成一个 MainWindow:

图片[19]-QT添加MQTT库-昕某人の博客

不需要翻译:

图片[20]-QT添加MQTT库-昕某人の博客

接下来的编译套件,选择MinGW:

图片[21]-QT添加MQTT库-昕某人の博客

创建完成之后,我们在UI 文件中随便添加一点控件:

图片[22]-QT添加MQTT库-昕某人の博客

我这里添加了一个 Label 控件:

图片[23]-QT添加MQTT库-昕某人の博客

这里直接点击左下角的运行即可,如果你还下载了其他的构建套件,那么需要选择MinGW来构建(本文一律按照MinGW来):

图片[24]-QT添加MQTT库-昕某人の博客

点击运行:

图片[25]-QT添加MQTT库-昕某人の博客

至此,我们QT的安装工作已经完成了,接下来我们来添加MQTT的支持。

编译 MQTT 库

MQTT 库有两个,一个是官方库,一个是第三方库,二者的差别就是一个 API 上,使用方面没有太大区别。本文以第三方库为教程。

注意:如果你想尝试官网的库,那么需要在GitHub主页的分支里选择与你QT版本对应的分支来编译。

第三方 MQTT 库的仓库:qmqtt仓库

下载源码,直接打开工程:

图片[26]-QT添加MQTT库-昕某人の博客

对着src目录右键,执行 qmake,再点击构建 src(注意工具链选择 MinGW,构建方式选择 Release):

图片[27]-QT添加MQTT库-昕某人の博客

这里需要注意:Release和Debug版本的选择,如果你的代码分两个版本,那么我推荐你分别使用Release和Debug构建库,然后在引用的时候手动区分。因为一般区分Release和Debug的方式是对Debug版本的库添加一个d,如mqtt.dll是Release版本的,那么Debug的为mqttd.dll,但是二者在这个库中使用不同方式编译出的dll文件是同名的,需要手动给Debug的添加d后缀,在这里,我并没有区分二者,也就是Release和Debug版本使用的是同一个库。

构建完成生成的目录如下:

图片[28]-QT添加MQTT库-昕某人の博客

然后我们需要拷贝生成的文件,分以下两步:

复制头文件
新建一个 include 文件夹,将” 源码” 中的头文件复制到新建的文件夹中:

图片[29]-QT添加MQTT库-昕某人の博客

复制编译好的库:
打开编译好的目录中的 lib 目录,将其中的如下文件复制到一个自建的文件夹中,自建的文件夹名字建议为 lib:

图片[30]-QT添加MQTT库-昕某人の博客

部署 MQTT 库

新建一个工程,将上面做好的俩个文件夹放到工程目录中:

图片[31]-QT添加MQTT库-昕某人の博客

打开工程,进入工程 pro 文件中,添加 network 模块:

图片[32]-QT添加MQTT库-昕某人の博客

然后在空白处点击右键 -> 添加库 -> 外部库,进入配置页面:

图片[33]-QT添加MQTT库-昕某人の博客

选择库文件的地址和头文件目录,注意要取消勾选下面红框中的选项:

图片[34]-QT添加MQTT库-昕某人の博客

最终会自动在.pro 文件中添加如下内容:

图片[35]-QT添加MQTT库-昕某人の博客

使用 MQTT 库

使用 MQTT 库,只需要包含头文件即可:

#include "qmqtt.h"

主要的接口有如下:

void setHost(const QHostAddress& host);
void setPort(const quint16 port);
void setClientId(const QString& clientId);
void setUsername(const QString& username);
void setPassword(const QString& password);
void setKeepAlive(const int keepAlive);
void setCleanSession(const bool cleansess);
void setAutoReconnect(const bool value);
void setAutoReconnectInterval(const int autoReconnectInterval);
void setWillTopic(const QString& willTopic);
void setWillQos(const quint8 willQos);
void setWillRetain(const bool willRetain);
void setWillMessage(const QString& willMessage);

void connectToHost();
void disconnectFromHost();

quint16 subscribe(const QString& topic, const quint8 qos);
void unsubscribe(const QString& topic);

quint16 publish(const Message& message);

SIGNAL

void connected();
void disconnected();
void error(const QMQTT::ClientError error);

void subscribed(const QString& topic, const quint8 qos);
void unsubscribed(const QString& topic);
void published(const quint16 msgid, const quint8 qos);
void pingresp();
void received(const QMQTT::Message& message);

测试

测试的代码:QtMqtt示例代码

部署服务端

部署 MQTT 服务端,打开上面下载好的 emqx 源码,进入 bin 目录,执行如下命令:

emqx.cmd start

执行后 cmd 窗口就可以关闭了,服务已经在后台运行。执行此命令只要不报错就算执行成功。

打开 http://127.0.0.1:18083,进入后台管理界面,默认的账号密码分别为:admin 和 public:

图片[36]-QT添加MQTT库-昕某人の博客

后台的界面如下:

图片[37]-QT添加MQTT库-昕某人の博客

启动 MQTTX,创建一个连接:

图片[38]-QT添加MQTT库-昕某人の博客

注意地址和端口,默认端口就是 1883,用户名密码为空。

连接成功如下:

图片[39]-QT添加MQTT库-昕某人の博客

输入一个 topic 和 message,点击发送:

图片[40]-QT添加MQTT库-昕某人の博客

测试客户端

打开上面的 DEMO,打开mainwindow.cpp,查看端口和地址是否正确:

主要代码如下:

图片[41]-QT添加MQTT库-昕某人の博客

运行 demo,点击 connect:

图片[42]-QT添加MQTT库-昕某人の博客

可以看到之前的消息也被同步过来了,现在我们发送一条消息试试:

先在 MQTTX 中订阅一个主题:

图片[43]-QT添加MQTT库-昕某人の博客

然后在 demo 中向这个主题发送消息:

图片[44]-QT添加MQTT库-昕某人の博客

可以看到 MQTTX 中收到了消息:

图片[45]-QT添加MQTT库-昕某人の博客

文章版权声明 1、本网站名称:昕某人の博客
2、本站永久网址:https://xinmouren.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片