QT+MQTT 使用MQTT官方库

开发环境:win7 64 + Qt5.9

       基于MQTT协议的优良特性,和所从事的软件开发消息较多,与MQTT较为契合,因此先调研MQTT的使用。 

 一、MQTT官方库下载路径 

             github地址:https://github.com/qt/qtmqtt  

QT+MQTT 使用MQTT官方库_第1张图片

我选择下载5.10版本。 

二、编译下载的MQTT 

QT+MQTT 使用MQTT官方库_第2张图片

我这里的编译环境是:Qt5.12.3+

 

编译完成后:bin目录下就是我们要的库文件:QT+MQTT 使用MQTT官方库_第3张图片 

三、新建MqttClient工程,将MQTT库作为外部库导入 

 新建工程目录下新建lib  include目录

QT+MQTT 使用MQTT官方库_第4张图片

打开新建工程的pro文件,添加:

QT       += core gui network




win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lQt5Mqtt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lQt5Mqttd


INCLUDEPATH += $$PWD/include
DEPENDPATH += $$PWD/include

将 库文件放到新建工程的lib文件下QT+MQTT 使用MQTT官方库_第5张图片

 在mainwindow.h中加入头文件引用

#include "include/qmqttclient.h"

将所有的头文件拷贝到i新建nclude文件夹下 

QT+MQTT 使用MQTT官方库_第6张图片

四、链接服务器、断开服务器、订阅消息、发布下次、接收消息代码 

 初始化mqtt指针

    QMqttClient * m_client;//mqtt client指针
    m_client  =  new QMqttClient(this);

链接断开服务器

void MainWindow::on_pushButton_clicked()
{
    //未连接服务器则连接
    if (m_client->state() == QMqttClient::Disconnected) {
        m_client->setHostname("127.0.0.1");
        m_client->setPort(1883);
        m_client->connectToHost();
    } else {//断开连接
        m_client->disconnectFromHost();
    }
}

 订阅消息

void MainWindow::on_pushButton_3_clicked()
{
    QString topicSub ="firsttopic";;
    if(m_client->state() == QMqttClient::Connected)
    {
        m_client->subscribe(topicSub, 0);
        connect(m_client, SIGNAL(messageReceived(QByteArray,QMqttTopicName)), this, SLOT(receiveMess(QByteArray,QMqttTopicName)));
        return;
    }
}

发布消息

void MainWindow::on_pushButton_2_clicked()
{
    QString topic ="firsttopic";
    QString mess ="第一条消息";
    if (m_client->publish(topic,mess.toUtf8()) == -1){}
          //QMessageBox::critical(this, QLatin1String("Error"), QLatin1String("Could not publish message"));
}

接收消息

 connect(m_client, SIGNAL(messageReceived(QByteArray,QMqttTopicName)), this, SLOT(receiveMess(QByteArray,QMqttTopicName)));

void MainWindow::receiveMess(const QByteArray &message, const QMqttTopicName &topic)
{
    QString content;
        content = QDateTime::currentDateTime().toString() + QLatin1Char('\n');
        content += QLatin1String(" Received Topic: ") + topic.name() + QLatin1Char('\n');
        content += QLatin1String(" Message: ") + message + QLatin1Char('\n');
        ui->textEdit->append(content);
}

五、验证

 链接服务器:

QT+MQTT 使用MQTT官方库_第7张图片

断开服务器 

发布消息

通过MQTT.fx订阅程序发布的消息

QT+MQTT 使用MQTT官方库_第8张图片

 接收消息

QT+MQTT 使用MQTT官方库_第9张图片

你可能感兴趣的:(每日一学,qt,物联网,开发语言)