Qt 中集成mqtt協(xié)議的使用方法
更新時間:2025年02月24日 12:04:13 作者:土撥鼠不是老鼠
文章介紹了如何在工程中引入qmqtt庫,并通過聲明一個單例類來暴露訂閱到的主題數(shù)據(jù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
一,引入qmqtt 庫
我是將整個頭文件/源文件都添加到了工程中進(jìn)行編譯,這樣 跨平臺時 方便,直接編譯就行了。
原始倉庫路徑:https://github.com/emqx/qmqtt/tree/master
二,使用
聲明一個單例類,將訂閱到主題,直接以屬性的方式 進(jìn)行暴露,這樣QML文件中 就可以直接使用。 下邊是訂閱一個溫度 和濕度的主題數(shù)據(jù)。
#ifndef MQTTMANAGERT_H #define MQTTMANAGERT_H #include <iostream> #include <mqtt/qmqtt.h> 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 "mqttManagert.h" MQTTManager* MQTTManager::manager=nullptr; const QString HOST= "127.0.0.1"; //服務(wù)器地址 //需要訂閱的主題 const QString TOPIC_IN_TEMPERATURE_HUMIDITY ="qmqtt/in_temperature_humidity"; MQTTManager::MQTTManager(){ client = new QMQTT::Client(QHostAddress(HOST),1883,this); connect(client,&QMQTT::Client::connected,this,&MQTTManager::doConnected); connect(client,&QMQTT::Client::disconnected,this,&MQTTManager::doDisconnected); connect(client,&QMQTT::Client::received,this,&MQTTManager::doDataReceived); connect(client, &QMQTT::Client::subscribed, this, &MQTTManager::onSubscribed); client->connectToHost(); } MQTTManager::~MQTTManager(){ client->disconnected(); } MQTTManager* MQTTManager::instance(){ if(!manager){ manager = new MQTTManager(); } return manager; } void MQTTManager::doConnected(){ qDebug()<<"doConnected ok"; //再此訂閱主題 client->subscribe(TOPIC_IN_TEMPERATURE_HUMIDITY); } void MQTTManager::onSubscribed(const QString& topic) { qDebug() << "onSubscribed " << topic; } void MQTTManager::doDataReceived(QMQTT::Message message){ //收到消息 QString mes = QString(message.id())+" "+QString(message.qos())+" "+message.topic()+" "+message.payload()+"\n"; qDebug()<<"dataReceived "<<mes; //根據(jù)主題過濾消息 if(message.topic()==TOPIC_IN_TEMPERATURE_HUMIDITY){ QStringList dataList = QString(message.payload()).split(","); if(dataList.size()==2){ setInTemperature(dataList[0]); setInHumidity(dataList[1]); } } } void MQTTManager::doDisconnected(){ qDebug()<<"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(); }
到此這篇關(guān)于Qt 中集成mqtt協(xié)議的使用方法的文章就介紹到這了,更多相關(guān)Qt 集成mqtt協(xié)議內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實(shí)現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)的個數(shù)
本文詳細(xì)講解了C語言實(shí)現(xiàn)統(tǒng)計100以內(nèi)所有素數(shù)個數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。需要的朋友可以收藏下,方便下次瀏覽觀看2021-11-11