SoFunction
Updated on 2025-04-08

How to use the integrated mqtt protocol in Qt

1. Introduce the qmqtt library

I added the entire header/source file to the project for compilation, so that it is convenient for cross-platform, just compile directly.

Original warehouse path: /emqx/qmqtt/tree/master

2. Use

Declare a singleton class, subscribe to the topic, and expose it directly in the form of attributes, so that it can be used directly in the QML file. Below is the subject data for subscribing to a temperature and humidity.

#ifndef MQTTMANAGERT_H
#define MQTTMANAGERT_H
#include <iostream>
#include <mqtt/>
class MQTTManager:public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString inTemperature READ getInTemperature WRITE setInTemperature NOTIFY inTemperatureChanged FINAL)
    Q_PROPERTY(QString inHumidity READ getInHumidity WRITE setInHumidity NOTIFY inHumidityChanged FINAL)
public:
    static MQTTManager* instance();
    QString getInTemperature() const;
    void setInTemperature(QString newInTemperature);
    QString getInHumidity() const;
    void setInHumidity(QString newInHumidity);
private:
    ~MQTTManager();
    MQTTManager();
public slots:
    void doConnected();
    void onSubscribed(const QString& topic);
    void doDisconnected();
    void doDataReceived(QMQTT::Message message);
signals:
    void inTemperatureChanged();
    void inHumidityChanged();
private:
    QMQTT::Client *client;
    static MQTTManager *manager;
    QString inTemperature;
    QString inHumidity;
};
#endif // MQTTMANAGERT_H
#include ""
MQTTManager* MQTTManager::manager=nullptr;
const QString HOST= "127.0.0.1"; //Server address// Subscriptions requiredconst QString TOPIC_IN_TEMPERATURE_HUMIDITY ="qmqtt/in_temperature_humidity";
MQTTManager::MQTTManager(){
    client = new QMQTT::Client(QHostAddress(HOST),1883,this);
    connect(client,&amp;QMQTT::Client::connected,this,&amp;MQTTManager::doConnected);
    connect(client,&amp;QMQTT::Client::disconnected,this,&amp;MQTTManager::doDisconnected);
    connect(client,&amp;QMQTT::Client::received,this,&amp;MQTTManager::doDataReceived);
    connect(client, &amp;QMQTT::Client::subscribed, this, &amp;MQTTManager::onSubscribed);
    client-&gt;connectToHost();
}
MQTTManager::~MQTTManager(){
    client-&gt;disconnected();
}
MQTTManager* MQTTManager::instance(){
    if(!manager){
        manager = new MQTTManager();
    }
    return manager;
}
void MQTTManager::doConnected(){
    qDebug()&lt;&lt;"doConnected ok";
    //Subscribe to the topic again    client-&gt;subscribe(TOPIC_IN_TEMPERATURE_HUMIDITY);
}
void MQTTManager::onSubscribed(const QString&amp; topic)
{
    qDebug() &lt;&lt; "onSubscribed " &lt;&lt; topic;
}
void MQTTManager::doDataReceived(QMQTT::Message message){
    //Received a message    QString mes = QString(())+" "+QString(())+" "+()+" "+()+"\n";
    qDebug()&lt;&lt;"dataReceived "&lt;&lt;mes;
   //Filter messages based on topic    if(()==TOPIC_IN_TEMPERATURE_HUMIDITY){
        QStringList dataList = QString(()).split(",");
        if(()==2){
            setInTemperature(dataList[0]);
            setInHumidity(dataList[1]);
        }
    }
}
void MQTTManager::doDisconnected(){
    qDebug()&lt;&lt;"doDisconnected ok";
}
QString MQTTManager::getInTemperature() const
{
    return inTemperature;
}
void MQTTManager::setInTemperature(QString newInTemperature)
{
    if (inTemperature == newInTemperature)
        return;
    inTemperature = newInTemperature;
    emit inTemperatureChanged();
}
QString MQTTManager::getInHumidity() const
{
    return inHumidity;
}
void MQTTManager::setInHumidity(QString newInHumidity)
{
    if (inHumidity == newInHumidity)
        return;
    inHumidity = newInHumidity;
    emit inHumidityChanged();
}

This is the article about how to use the integrated mqtt protocol in Qt. For more related Qt integrated mqtt protocol, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!