Unknown module(s) in QT: mqtt

Unknown module(s) in QT: mqtt

以上问题只是个引子,我遇到的问题是mqtt库无法通过QT += mqtt方式使用。于是编译器给出以上提示。以下描述解决办法。

我的编译环境

操作系统 windows10 版本1909
QT 安装包版本:5.12.9
QT 安装位置:C:\Qt\Qt5.12.9\Examples\Qt-5.12.9
QT 编译工具链:Desktop_Qt_5_12_9_MSVC2017_64bit
mqtt 源代码:来自github,注意选择与QT安装包一致的版本。 下载链接
mqtt 源码本地位置:d:/qtest/

mqtt库编译结果

  1. 双击qtmqtt.pro,打开工程;
  2. 构建工程,目录(build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\bin)下生成Qt5Mqtt.dll和Qt5Mqttd.dll,分别对应发行版(release)和调试版(debug)。
  3. 目录build-qtmqtt-Desktop_Qt_5_12_9_MSVC2017_64bit-Debug\lib下生成Qt5Mqtt.lib和.prl,以及Qt5Mqttd.lib和prl文件。

示例编译结果

  1. 按照QT官方规范,把示例代码(D:\qtest\qtmqtt-5.12.9\examples)mqtt整个目录copy至QT安装目录(C:\Qt\Qt5.12.9\Examples\Qt-5.12.9)。
  2. copy完成后,双击示例工程文件mqtt.pro,打开示例工程。
  3. 构建设置中选择MSVC2017_64bit(我本地的工具链)。
  4. 实施构建动作。

出现的问题及解决办法

  1. 问题1:找不到库文件Qt5Mqttd.lib。编译输出:-1: error: dependent ‘C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\lib\Qt5Mqttd.lib’ does not exist.
    解决办法:把编译好的对应库copy到错误提示中标明的位置,再次编译。
  2. 问题2:头文件不存在。编译输出:error: dependent ‘5.12.9\msvc2017_64\include\QtMqtt\QMqttClient’ does not exist.
    解决办法:以QMqttClient不存在为例。需要复制mqtt源码中的对应头文件到"QT安装目录\5.12.9\msvc2017_64\include\QtMqtt",同时增加QMqttClient文件,文件内容很简单:#include “qmqttclient.h”。举一反三处理所有类似问题。
  3. 问题3:不知道QT中的mqtt库。编译输出: error: Unknown module(s) in QT: mqtt
    解决办法:在mqtt编译输出的目录中找到目录:mkspecs\modules-inst,并复制两个pri文件到目录C:\Qt\Qt5.12.9\5.12.9\msvc2017_64\mkspecs\modules,再次编译不在出现错误。
    总结
    一、库版本和位置是否放置在相应编译工具链目录下。
    二、头文件是否对应到类名文件,并放置到编译工具链目录下。
    三、modules-inst下的pri文件是否放置到编译工具链目录的相应目录下, QT +=mqtt 能否正常工作都依赖目录里的pri文件。

成果

示例代码中的simpleclient.exe运行结果。
simpleclient运行效果

没有更多了(完)

桃花坞里桃花庵,桃花庵里桃花仙;
桃花仙人种桃树,又摘桃花卖酒钱。唐寅-明

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Qt5 Mqtt模块是用于实现MQTT(Message Queuing Telemetry Transport)协议的Qt模块,它提供了连接到MQTT代理服务器的功能,可以发布和订阅主题消息。在Qt5.12.1版本中,该模块已经包含在Qt的核心库中。 使用Qt5 Mqtt模块,您可以使用以下步骤进行MQTT通信: 1. 创建一个MQTT客户端对象,并连接到MQTT代理服务器。 2. 发布消息到指定的主题。 3. 订阅感兴趣的主题,并接收对应的消息。 以下是一个简单的例子来演示如何使用Qt5 Mqtt模块: ```cpp #include <QtMqtt/QMqttClient> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QMqttClient client; client.setHostname("mqtt.example.com"); // 设置MQTT代理服务器地址 client.setPort(1883); // 设置MQTT代理服务器端口 client.connectToHost(); // 连接到MQTT代理服务器 // 连接成功后,订阅主题 QObject::connect(&client, &QMqttClient::connected, [&client]() { qDebug() << "Connected to MQTT broker"; client.subscribe("mytopic", 0); // 订阅主题 "mytopic" }); // 收到消息时打印出来 QObject::connect(&client, &QMqttClient::messageReceived, [](const QByteArray &message, const QMqttTopicName &topic) { qDebug() << "Received message:" << message << "on topic:" << topic.name(); }); return app.exec(); } ``` 这只是一个简单的例子,您可以根据自己的需求进行进一步的扩展和定制。希望对您有所帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值