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

简介: 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


相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
传感器 XML 消息中间件
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
Qt开发技术:mqtt介绍、QtMqtt编译和开发环境搭建
|
1月前
|
Linux 编译器 C语言
QT编译安装QtMqtt子模块,Linux平台
QT编译安装QtMqtt子模块,Linux平台
|
11月前
|
IDE 编译器 开发工具
统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo
上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试。
|
11月前
|
芯片
统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。
统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
|
IDE 编译器 开发工具
麒麟系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.8.1,并配置编译测试Demo
麒麟系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.8.1,并配置编译测试Demo
麒麟系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.8.1,并配置编译测试Demo
|
数据库管理
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
麒麟系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12
Qt之pro配置多个子工程/子模块
简述 进行Qt项目开发的时候,尤其是大型项目,经常涉及多工程/多模块问题,其主要思想还是模块化,目的是为了降低程序复杂度,使程序设计、调试和维护等操作简单化。 简述 配置 效果 多工程 多模块 更多参考 配置 效果 多工程 如果需要管理多工程(pro),比如:库工程、界面工程,其中,每一个工程均可单独编译成功,但存在依赖关系。
2067 0
|
2月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
23 0
|
2月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
41 8
C++ Qt开发:QTcpSocket网络通信组件
|
8天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
18 1