Qt 5.14-MQTT开发环境搭建
-
Qt 5.14下载
qt creator下载地址https://download.qt.io/archive/qt/ 提示:现在该链接已经无法下载,可以找一些网盘连接!5.15后续版本个人只有在线安装了5.15前独立安装包qt creator需要断开网络否则需要账号密码登录,断开网络则跳过。
-
Qt 5.14安装
选择组件 ,mqtt环境搭建可以选择安装两种编译环境,后续无法单独安装,后面安装都是默认即可。

-
下载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复制到刚才的两个目录中。
-
开始编译QtMqtt
解压QtMqtt源码压缩包,双击打开qtmqtt.pro工程文件。

选择两个编译环境(任选其一也可以),点击configure project。

点击编译前,先选择版本(32位或64位)再开始编译。

编译过程中注意查看编译器输出,不要有错误!! -
在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目录中

-
测试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-新大陆连接实例
- 新大陆项目创建,参考新大陆平台http://www.nlecloud.com/doc/quickstart.shtml
- 新大陆MQTT通讯协议说明
具体协议内容,参考新大陆云平台http://www.nlecloud.com/doc/resources.shtml

- 具体测试代码:
#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();
}
- 新大陆云平台结果:




3288

被折叠的 条评论
为什么被折叠?



