QT编译安装QtMqtt子模块,WIN平台


系统:Windows10
环境:QT5.12.9

下载源代码编译

GitHub上下载的源代码未发现有.pro文件所以无法一直无从下手怎么去编译,然后偶然的机会在CSDN上打开GitHub加速下载链接惊喜的发现有.pro文件,这里给出链接:点击直达
在这里插入图片描述

在这里插入图片描述
GitHub原链接:
在这里插入图片描述
当我们下载好后解压打开工程文件,取消影子构建,然后点击构建
在这里插入图片描述
当编译完成过后会有几个新的文件夹生成到我们的代码目录中
在这里插入图片描述

添加库文件到QT安装目录

然后我们需要用到的文件有:
在这里插入图片描述
在这里插入图片描述
然后我们进入qt的安装目录,进入到你需要使用的编译器的文件夹,我这里的windows平台用的是mingw所以就进入这个文件夹
在这里插入图片描述
然后再include目录下新建一个QtMqtt文件夹然后讲src/mqtt文件夹下的所有.h文件复制过来
在这里插入图片描述
然后是将编译的lib文件中的.dll文件存放到编译器目录的bin文件中,将.pri和.a文件存放到lib文件中
在这里插入图片描述

测试工程

ui页面
在这里插入图片描述
.pro工程文件

QT   +=  qmqtt

在这里插入图片描述
添加头文件

#include <QtMqtt/qmqtt.h>

完整的.c文件

#include "testmqtt.h"
#include "ui_testmqtt.h"

testMqtt::testMqtt(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::testMqtt)
{
    client = new QMQTT::Client(); // 初始化QMQTT客户指针
    ui->setupUi(this);
    connect(client, SIGNAL(received(QMQTT::Message)),this, SLOT(MQTT_Received(QMQTT::Message)));
}

testMqtt::~testMqtt()
{
    delete ui;
}

void testMqtt::on_btn_connect_clicked()
{
    QHostAddress host(ui->edit_ip->text());
    quint16 port = ui->edit_port->text().toUInt();
    QString id = "qt-client";
    QString username = "useradmin";   // 用户名
    QByteArray password = "password"; // 登录密码

    client->setKeepAlive(60); // 心跳
    client->setHost(host); // 设置 EMQ 代理服务器
    client->setPort(port); // 设置 EMQ 代理服务器端口
    client->setClientId(id); // 设备 ID
    client->setUsername(username);
    client->setPassword(password);
    client->cleanSession();
    client->setVersion(QMQTT::MQTTVersion::V3_1_1); // 设置mqtt版本

    qDebug()<<port<<endl;
    qDebug()<<host<<endl;

    client->connectToHost(); // 连接 EMQ 代理服务器

    QTimer::singleShot(1000, this, [=](){
        ui->edit_message->insertPlainText("链接成功\n");
    });
}

void testMqtt::on_btn_subscribe_clicked()
{
    client->subscribe(ui->edit_topic->text(),quint8(ui->cmb_qos->currentText().toInt())); // 订阅主题  对应取消订阅unsubscribe
    ui->edit_message->insertPlainText("订阅了["+ui->edit_topic->text()+"]主题\n");
}

void testMqtt::on_btn_publish_clicked()
{
    QMQTT::Message msg;
    msg.setQos(quint8(ui->cmb_qos->currentText().toInt()));
    msg.setTopic(ui->edit_topic->text());
    msg.setPayload(ui->edit_pushtext->text().toUtf8());
    client->publish(msg);
    ui->edit_message->insertPlainText("发送:" + ui->edit_pushtext->text().toUtf8()+"\n");
}

void testMqtt::MQTT_Received(QMQTT::Message message)
{
    QString str = message.payload();
    ui->edit_message->insertPlainText("收到消息主题[ " + message.topic() +"]:"+str.toLocal8Bit() + "\n");
}

完整的.h文件

#ifndef TESTMQTT_H
#define TESTMQTT_H

#include <QWidget>
#include <QtMqtt/qmqtt.h>
#include <QDebug>
#include <QTimer>

namespace Ui {
class testMqtt;
}

class testMqtt : public QWidget
{
    Q_OBJECT

public:
    explicit testMqtt(QWidget *parent = nullptr);
    ~testMqtt();

private slots:
    void on_btn_connect_clicked();

    void on_btn_subscribe_clicked();

    void on_btn_publish_clicked();

    void MQTT_Received(QMQTT::Message message);

private:
    Ui::testMqtt *ui;
    QMQTT::Client *client;
};

#endif // TESTMQTT_H

最终效果

在这里插入图片描述
快下班了代码写的比较着急,但效果大概就是这样,可以作为参考,后续可能还会做一期Linux和arm上的编写敬请期待。

2021-10-15 补充:将配置文件添加到安装目录

将编译好的配置文件,如下图
在这里插入图片描述添加到QT编译器目录的modules中
在这里插入图片描述配置完成过后使用qmqtt编译的时候可能还会出现找不到文件的情况
在这里插入图片描述
这里是因为#include<>和#include"“的区别,前者是从标准库中去寻找文件,后者则是从工程中寻找文件,遇到这个错误只需要将qmqtt的头文件换成#include”"引用即可,这里不止一处会出现该问题需要注意,这里还需要注意的是编译的MQTT库文件不要删除因为配置文件中有相关目录是指向编译文件的目录的。

完整文件下载

我用阿里云盘分享了「qt mqtt」,你可以不限速下载🚀
复制这段内容打开「阿里云盘」App 即可获取
链接:https://www.aliyundrive.com/s/vrTRX16bpZq

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉开水白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值