成宝宗-Qt5.14-QtMqtt开发环境搭建与实例代码

Qt 5.14-MQTT开发环境搭建

  1. Qt 5.14下载

    qt creator下载地址https://download.qt.io/archive/qt/ 提示:现在该链接已经无法下载,可以找一些网盘连接!5.15后续版本个人只有在线安装了5.15前独立安装包qt creator需要断开网络否则需要账号密码登录,断开网络则跳过。

  2. Qt 5.14安装

    选择组件 ,mqtt环境搭建可以选择安装两种编译环境,后续无法单独安装,后面安装都是默认即可。
    在这里插入图片描述

  3. 下载QtMqtt源码

    QtMqtt库下载地址https://github.com/qt/qtmqtt/库中的某些功能只在特定版本中可用。‌通过编译官方QtMqtt库,‌可以确保使用的QtMqtt库与当前的Qt版本完全兼容从git库下载 QtMqtt库的时候一定要切换到qt版本对应的分支,点击code并下载压缩包。
    在这里插入图片描述

在这里插入图片描述
4. 准备编译QtMqtt

在Qt安装目录C:\Qt\Qt5.14.0\5.14.0\mingw73_32\include 中创建一个目录QtMqtt,准备存放QtMqtt相关的头文件,同理如果需要64位开发环境也需要创建同样的目录C:\Qt\Qt5.14.0\5.14.0\mingw73_64\include\QtMqtt。
在这里插入图片描述
解压qtmqtt源码压缩包,将qtmqtt-5.14.0\src\mqtt中的所有.h文件,共18个.h复制到刚才的两个目录中。
在这里插入图片描述

  1. 开始编译QtMqtt

    解压QtMqtt源码压缩包,双击打开qtmqtt.pro工程文件。
    在这里插入图片描述

    选择两个编译环境(任选其一也可以),点击configure project。
    在这里插入图片描述

    点击编译前,先选择版本(32位或64位)再开始编译。
    在这里插入图片描述
    编译过程中注意查看编译器输出,不要有错误!!

  2. 在Qt中配置QtMqtt开发环境

    复制库文件:将lib目录(build-qtmqtt-Desktop_Qt_5_14_0_MinGW_32_bit-Debug\lib)中4个库文件拷贝到QT编译环境中的lib目录(C:\Qt\Qt5.14.0\5.14.0\mingw73_32\lib)(64位也是同理)。
    在这里插入图片描述
    复制pc文件:Lib库中的pkgconfig的文件拷贝到编译环境中的lib库pkgconfig
    在这里插入图片描述
    复制dll文件:将bin目录中的文件拷贝到编译环境中的bin目录
    在这里插入图片描述
    复制pri文件:将mkspecs\modules目录中的pri文件拷贝到mkspecs\modules目录中
    在这里插入图片描述

  3. 测试QtMqtt环境是否可用

    使用QtMqtt自带源代码程序:将源码中的simpleclient目录qtmqtt-5.14.0\examples\mqtt\simpleclient,复制到其他目录中,然后再双击pro工程文件
    在这里插入图片描述
    编译程序注意版本(32位或64位),编译过程中会出现问题,主要是头文件问题:

    • 将代码中的#include < QMqttClient> 换成 #include <QtMqtt/qmqttclient.h>
    • 将代码中的#include < QtMqtt/QMqttClient> 换成 #include <QtMqtt/qmqttclient.h>
    • 工程文件中 增加 QT += mqtt模块

    编译成功后出现下面界面表示环境成功!
    在这里插入图片描述

Qt 5.14-MQTT-新大陆连接实例

  1. 新大陆项目创建,参考新大陆平台http://www.nlecloud.com/doc/quickstart.shtml
  2. 新大陆MQTT通讯协议说明

    具体协议内容,参考新大陆云平台http://www.nlecloud.com/doc/resources.shtml
    在这里插入图片描述

  3. 具体测试代码:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QMessageBox>
#include <QTimer>
#include <QtMqtt/qmqttclient.h>
#include <QtMqtt/qmqttmessage.h>
#include <QtMqtt/qmqtttopicname.h>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_btn_clicked();
    void myconnect();
    void myread(const QByteArray &ba, const QMqttTopicName &tname);
    void mytimeout(void);
private:
    Ui::Widget *ui;
    QMqttClient *client;
    QTimer *timer;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer;
    timer->start(5000);
    timer->stop();
    connect(timer,&QTimer::timeout,this,&Widget::mytimeout);
    client = new QMqttClient;
    client->setHostname("121.37.241.174");
    client->setPort(1883);
    client->setClientId("mymqtt_texx");//设备标识
    client->setUsername("11664xx");//设备id
    client->setPassword("dfeda6b96a95435a8f6010f32946xxxx");//传输密钥

    connect(client,&QMqttClient::connected,this,&Widget::myconnect);
    connect(client,&QMqttClient::messageReceived,this,&Widget::myread);

}

Widget::~Widget()
{
    delete ui;
}
void Widget::mytimeout(void){
    //QMqttTopicName topic("/sys/{projectId}/{device}/sensor/datas");
    QMqttTopicName topic("/sys/11664xx/mymqtt_texx/sensor/datas");
    //QMqttMessage message;
    //message.setPayload("Hello, MQTT!");
    QByteArray str;
    str = "{\"datatype\":1,\"datas\":{\"temp\":45},\"msgid\":123}";
    client->publish(topic, str);
    ui->tedit->append(str);
}
void Widget::myread(const QByteArray &ba, const QMqttTopicName &tname){
    QString str;
    str = tname.name()+QString(ba);
    //ui->tedit->append(str);
    ui->tedit->append(ba);
}
void Widget::myconnect(){
    QMessageBox::about(this,"连接提示","连接成功!!");
    timer->start();
}
void Widget::on_btn_clicked()
{
    client->connectToHost();
}
  1. 新大陆云平台结果:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值