如何用Qt5.9接收EMQ代理服务器传过来的话题消息(已经订阅的)(C++语言)
2017-12-25 15:55
465 查看
本文主要总结基于QMQTT协议客户端接,如何收来自EMQ代理服务器发送过来的信息(已经订阅的),具体的操作如下所示:
想要接收来自EMQ代理服务器传输过来的话题消息(已经订阅的),可以直接用下列关联语句就行。
1.1在Qt5.9中新建一个widget工程,并且写好跟EMQ代理服务器连接函数。根EMD代理服务器连接成功后,则可以直接调用发布函数QMQTT::Message msg(0, "topic", "payload", 2);client->publish(msg)和订阅函数client->subscribe("topic",2);。
1.2然后在工程的MainWindow类的构造函数中,添加如下代码:
client=newQMQTT::Client();//初始化QMQTT客户端指针
connect(client,SIGNAL(received(constQMQTT::Message&)),this,SLOT(onMQTT_Received(constQMQTT::Message&)));
connect(client,SIGNAL(subscribed(constQString&)),this,SLOT(onMQTT_subscribed(constQString&)));
1.3在工程的MainWindow.h头文件添加如下代码
QMQTT::Client*client;//创建QMQTT客户端指针
voidonMQTT_Received(constQMQTT::Message&message);
voidonMQTT_subscribed(constQString&topic);
1.4在mainwindow.cpp源文件添加如下代码
voidMainWindow::onMQTT_Received(constQMQTT::Message&message)
{
QStringstrPaylaod=message.payload();
QMessageBox::warning(this,"payload",strPaylaod,QMessageBox::Yes,QMessageBox::No);
}
voidMainWindow::onMQTT_subscribed(constQString&topic)
{
QMessageBox::warning(this,"payload",topic,QMessageBox::Yes,QMessageBox::No);
}
二、接收EMQ代理服务器话题消息原理和应用详解
2.1 onMQTT_Received(const QMQTT::Message &message)函数应用详解
当发布客户端发送一个话题时(客户端已经订阅的话题),则该话题会直接发送到EMQ代理服务器中,EMQ代理服务器自动转发到所有订阅了这个话题的订阅客户端。这时,订阅了这个话题的客户端会自动触发函数onMQTT_Received(const QMQTT::Message &message),其中message类对象中存储了订阅的话题信息,包括topic和paylaod,QoS等信息。这时,只要用message.topic和message.paylaod就可以直接对内容进行处理操作,比如显示到UI窗口等。
如下图所示:
图1 发布客户端
图2 接收客户端
当一点击发布客户端发布话题topic的【publish】按钮时,发布客户端自动向EMQ代理服务器发送话题topic为:/Weather/123,有效内容payload为:abcd。
EMQ代理服务器自动转发该话题信息,给所有订阅了/Weather/123话题的客户端。此时订阅了/Weather/123话题的客户端,自动触发函数onMQTT_Received接收EMQ代理服务器发送过来的信息,并且存储在message类对象中。我将message类对象中的message.topic和message.payload信息用弹出框弹出,结果如图2所示。
2.2 MainWindow::onMQTT_subscribed(const QString &topic)函数应用详解
订阅客户端订阅一个话题,当该话题订阅成功后,则自动触发该函数onMQTT_subscribed,否则不触发。触发成功后,则将客户端订阅成功的话题信息存储在topic变量中。
图3 自动触发订阅成功话题
如图3所示,当连接正常时,点击一个订阅客户端的【subscribe】按钮,订阅成功后,则自动触发onMQTT_subscribed函数,并且将订阅成功的话题存储在topic变量中。我将该话题topic用图3显示出来。
参考内容:
https://github.com/emqtt/qmqtt-client https://stackoverflow.com/questions/43349145/qt-qmqtt-client-library-does-not-work-with-windows/46906890
想要接收来自EMQ代理服务器传输过来的话题消息(已经订阅的),可以直接用下列关联语句就行。
1.1在Qt5.9中新建一个widget工程,并且写好跟EMQ代理服务器连接函数。根EMD代理服务器连接成功后,则可以直接调用发布函数QMQTT::Message msg(0, "topic", "payload", 2);client->publish(msg)和订阅函数client->subscribe("topic",2);。
1.2然后在工程的MainWindow类的构造函数中,添加如下代码:
client=newQMQTT::Client();//初始化QMQTT客户端指针
connect(client,SIGNAL(received(constQMQTT::Message&)),this,SLOT(onMQTT_Received(constQMQTT::Message&)));
connect(client,SIGNAL(subscribed(constQString&)),this,SLOT(onMQTT_subscribed(constQString&)));
1.3在工程的MainWindow.h头文件添加如下代码
QMQTT::Client*client;//创建QMQTT客户端指针
voidonMQTT_Received(constQMQTT::Message&message);
voidonMQTT_subscribed(constQString&topic);
1.4在mainwindow.cpp源文件添加如下代码
voidMainWindow::onMQTT_Received(constQMQTT::Message&message)
{
QStringstrPaylaod=message.payload();
QMessageBox::warning(this,"payload",strPaylaod,QMessageBox::Yes,QMessageBox::No);
}
voidMainWindow::onMQTT_subscribed(constQString&topic)
{
QMessageBox::warning(this,"payload",topic,QMessageBox::Yes,QMessageBox::No);
}
二、接收EMQ代理服务器话题消息原理和应用详解
2.1 onMQTT_Received(const QMQTT::Message &message)函数应用详解
当发布客户端发送一个话题时(客户端已经订阅的话题),则该话题会直接发送到EMQ代理服务器中,EMQ代理服务器自动转发到所有订阅了这个话题的订阅客户端。这时,订阅了这个话题的客户端会自动触发函数onMQTT_Received(const QMQTT::Message &message),其中message类对象中存储了订阅的话题信息,包括topic和paylaod,QoS等信息。这时,只要用message.topic和message.paylaod就可以直接对内容进行处理操作,比如显示到UI窗口等。
如下图所示:
图1 发布客户端
图2 接收客户端
当一点击发布客户端发布话题topic的【publish】按钮时,发布客户端自动向EMQ代理服务器发送话题topic为:/Weather/123,有效内容payload为:abcd。
EMQ代理服务器自动转发该话题信息,给所有订阅了/Weather/123话题的客户端。此时订阅了/Weather/123话题的客户端,自动触发函数onMQTT_Received接收EMQ代理服务器发送过来的信息,并且存储在message类对象中。我将message类对象中的message.topic和message.payload信息用弹出框弹出,结果如图2所示。
2.2 MainWindow::onMQTT_subscribed(const QString &topic)函数应用详解
订阅客户端订阅一个话题,当该话题订阅成功后,则自动触发该函数onMQTT_subscribed,否则不触发。触发成功后,则将客户端订阅成功的话题信息存储在topic变量中。
图3 自动触发订阅成功话题
如图3所示,当连接正常时,点击一个订阅客户端的【subscribe】按钮,订阅成功后,则自动触发onMQTT_subscribed函数,并且将订阅成功的话题存储在topic变量中。我将该话题topic用图3显示出来。
参考内容:
https://github.com/emqtt/qmqtt-client https://stackoverflow.com/questions/43349145/qt-qmqtt-client-library-does-not-work-with-windows/46906890
相关文章推荐
- 如何在Qt中处理(接收/发送)MFC或Windows消息(直接覆盖MainDialog::nativeEvent,或者QApplication::installNativeEventFilter安装过滤器,或者直接改写QApplication::nativeEventFilter)
- 基于Qt5.9的QMQTT协议跟EMQ代理服务器的连接教程
- 如何在Qt中处理(接收/发送)MFC或Windows消息(message)
- ios程序后台运行时,当有消息推送过来,如何修改程序角标上是数字
- BizTalkServer 如何接收 EDI 消息(5)
- http如何像TCP一样实时接收消息
- android(SignalA)接收.net(SignalR)推送过来的消息
- 请问如何实现接收远程主机队列msmq的消息!
- Android如何接收locale改变的消息
- 如何在Qt中写两个类,它们可以相互发信号与接收信号
- Android演示如何接收广播消息
- highcharts如何接收java作为后台 struts2 传递过来的动态数据
- Socket编程中如何发送结构体,拼接多次接收消息及获取通信双方地址
- Qt 中如何捕获窗口停用和激活的消息 Activate&Deactivate
- Java后台如何接收并处理前台传过来的json格式的数组参数
- BizTalkServer 如何接收 EDI 消息(6)
- iOS 中如何除去UIAlertView 规避delegate对象销毁后接收消息的crash
- 如何判断Qt 4项目文件夹中已经存在某个项目
- qt类似于qq托盘图标闪烁的消息提示 (胡峰原创,代码已经过测试运行)
- QT接收SendMessage/PostMessage发出的消息