本文主要是介绍Qt 中集成mqtt协议的使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧...
一,引入qmqtt 库
我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台时 方便,直接编译就行了。
原始仓库路径:https://github.com/emqx/qmqtt/tree/master
二,使用
声明一个单例类,将订阅到主题,直接以属性的方式 进行暴露,这样QML文件中 就可以直接使用。 下边是订阅一个温度 和湿度的主题数据。
#ifndef MQTTMANAGERT_H #define MQTTMANAGERT_H #include <IOStream> #include <mqtt/qmqtt.h> class MQTTManager:public QObject { Q_OBJECT Q_PROPERTYdALLxfcIo(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(QSjstring 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; QStr编程ing inHumidity; }; #endif // MQTTMANAGERT_H
#include "mqttManagert.h" MQTTManager* MQTTManager::manager=nullptr; const QString HOST= "127.0.0.1"; //服务器地址 //需要订阅的主题 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, &MQTTManjsager::onSubscribed); client->connectToHost(); } MQTTManager::~MQTTManager(){ client->disconnected(); } MQTTManager* MQTTManager::instance(){ if(!manager){ manager = new MQTTManager(); } python 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; //根据主题过滤消息 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(); }
到此这篇关于Qt 中集成mqtt协议的使用方法的文章就介绍到这了,更多相关Qt 集成mqtt协议内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于Qt 中集成mqtt协议的使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!