QT5 中移植 MQTT 库,哭着解决

重点,重点,大重点!!!

 

我从网上也是找了很多的mqtt 在qt 中的移植。但是由于版本的问题,都是不兼容。导致最后也是很难运行起来。甚至是编译 不通过。在此一定要特别强调:每个版本不一样,结果也不一样,不需要千篇一律。

 

我使用的QT版本:QT5.14.2

mqtt版本路径:https://github.com/emqtt/qmqtt/tree/master

链接:https://pan.baidu.com/s/1ufwam8rpsqb1mbRuaRMABg 
提取码:msoj

使用方法:

在这里添加下面执行的方法,上次没有添加,感觉缺了一步。

QT (我用的QT5,win10系统)安装之后在开始的目录里有:

我使用的是32-bit 的MinGW 7.3.0  。 记住在安装QT 的时候要选中MinGW 安装。然后系统中若是没有则需要安装MinGW。官网下载即可。

 

在qmqtt-master 目录中:

1、qmake

2、mingw32-make

3、mingw32-make   install

这三步就可以将qmqtt 加入到qt 模块中使用。就可以这样了

 

这样就可以添加使用了。在我这个过程中,没有生成 ***d.dll  的调试文件

敲黑板:

     若是你选择了mingw  32-bit  ,则在QT 中调试运行时需要选择这个版本,例如:

因为我们使用什么版本去编译库,编译后的库及头文件等就会在此版本的文件夹中。所以要选择这个版本。

 

假如我们选择MinGW 32-bit 这个版本。则需要将下面目录中所有头文件都拷贝到mingw文件夹中。

拷贝后的样子。注意看截图中的路径。

好了,可以用库了。

 

再加一个例程,要不然都不知道怎么用!!

 

添加库指示:

头文件定义:

#ifndef MQTT_CONFIG_H
#define MQTT_CONFIG_H

#include <QMainWindow>
#include "bmstest.h"
#include "qmqtt.h"
#include "QTimer"

namespace Ui {
class Mqtt_Config;
}

class Mqtt_Config : public QMainWindow
{
    Q_OBJECT

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

signals:
    void disinfo_mqtt(const int index,const QString &str);

public slots:
    void dev_mac_slot(const int i,const QString &mac);

private slots:

    void dev_mqtt_slot(const QMQTT::Message &mes);
    void dev_mqtt_connected_slot();

    void on_Mqtt_Start_PB_clicked();

    void on_Mqtt_Stop_PB_clicked();

private:
    Ui::Mqtt_Config *ui;
    QMQTT::Client *dev_mqtt_client = nullptr;
    QString mac_backup_str[50] ;
};

#endif // MQTT_CONFIG_H

源文件:

#include "mqtt_config.h"
#include "ui_mqtt_config.h"


Mqtt_Config::Mqtt_Config(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Mqtt_Config)
{
    ui->setupUi(this);
    dev_mqtt_client = new QMQTT::Client();
}

Mqtt_Config::~Mqtt_Config()
{
    delete ui;
    delete dev_mqtt_client;
}

void Mqtt_Config::dev_mac_slot(const int i,const QString &str)
{
    mac_backup_str[i] = str;
//    qDebug() << "mac_back" << str;
}

void Mqtt_Config::dev_mqtt_slot(const QMQTT::Message &mes)
{
    QString mac = mes.payload().mid(2,12);
    QString cmd = mes.payload().mid(28,4);

    for(int i = 0; i < 50; i++) {
        if((mac == mac_backup_str[i]) && (cmd == "1201")) {
//            qDebug() << "i=" <<i<< "内容"<<mes.payload();
            emit disinfo_mqtt(i,mes.payload());
            break;
        }
    }
}

void Mqtt_Config::dev_mqtt_connected_slot()
{
    if(dev_mqtt_client->connectionState() == QMQTT::STATE_CONNECTED) {
        dev_mqtt_client->subscribe("serv/tq/b",1);
    }
}

void Mqtt_Config::on_Mqtt_Start_PB_clicked()
{
    QString pswd = "******";  //登录密码
    dev_mqtt_client->setHost(QHostAddress("xxx.xxx.xxx.xxx")); //登录IP
    dev_mqtt_client->setPort(xxx); //登录端口
    dev_mqtt_client->setUsername("******"); //登录用户名
    dev_mqtt_client->setPassword(pswd.toUtf8()); //登录密码处理
    dev_mqtt_client->setClientId("bms_mqtt_test");
    connect(dev_mqtt_client,&QMQTT::Client::received,this,&Mqtt_Config::dev_mqtt_slot);
    connect(dev_mqtt_client,&QMQTT::Client::connected,this,&Mqtt_Config::dev_mqtt_connected_slot);
    dev_mqtt_client->connectToHost();

    this->hide();

}

void Mqtt_Config::on_Mqtt_Stop_PB_clicked()
{
    dev_mqtt_client->unsubscribe("***"); //订阅的主题
    dev_mqtt_client->disconnectFromHost();

    this->hide();
}

 

注意:

1、在安装QT5 的过程中,会让我们选择安装的组件,一定要选择perl 安装。我的是perl  5.22 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值