当前位置:   article > 正文

qt中fastdds向主线程传递消息_fastdds set_history_qos

fastdds set_history_qos
  1. void CCDDS::init()
  2. {
  3. m_dds_recv = new fastdds(data_type_buf);
  4. int domain_id = 2;
  5. const char *topic = "recv";
  6. m_dds_recv->set_history_qos(recv_real_time);
  7. m_dds_recv->reg(domain_id, topic, recvData);
  8. }
  9. void CCDDS::recvData(void *data, int len)
  10. {
  11. // TODO
  12. }

以上代码为fastdds注册接收信息的方法,当fastdds接收到信息时会自动回调recvData方法,但是不是在ui线程中回调,所以此时对ui的操作不会生效。此时可以通过向UI对象传递事件的方式传递信息,然后操作ui。

首先,定义一个事件类

  1. /** 事件类,用于传递fastdds讯息 **/
  2. class LogEvent: public QEvent
  3. {
  4. public:
  5. LogEvent(QEvent::Type type = QEvent::User) : QEvent(type)
  6. {
  7. m_cmd = 0;
  8. }
  9. ~LogEvent()
  10. {
  11. }
  12. int cmd() const
  13. {
  14. return m_cmd;
  15. }
  16. void setCmd(int cmd)
  17. {
  18. m_cmd = cmd;
  19. }
  20. QString data() const
  21. {
  22. return m_data;
  23. }
  24. void setData(const QString &data)
  25. {
  26. m_data = data;
  27. }
  28. private:
  29. int m_cmd;
  30. QString m_data;
  31. };

然后在类中定义事件处理方法

  1. /** 自定事件处理 **/
  2. bool CCDDS::event(QEvent *e)
  3. {
  4. if(e->type() == QEvent::User)
  5. {
  6. LogEvent *evt = dynamic_cast<LogEvent *>(e);
  7. if(evt != nullptr)
  8. {
  9. int cmd = evt->cmd();
  10. // TODO
  11. }
  12. }
  13. return QWidget::event(e);
  14. }

最重要的:在类外定义一个全局变量,且在类初始化时赋值用于传递信息

  1. static QWidget* gWidget = nullptr;
  2. CCDDS::CCDDS(QWidget *parent)
  3. : QWidget{parent}
  4. {
  5. gWidget = this;
  6. }

最后只需在回调方法构造发送事件即可

  1. void CCDDS::recvData(void *data, int len)
  2. {
  3. if(gWidget == nullptr) {
  4. return;
  5. }
  6. // 获取信息通过event传到类中
  7. QString str_data = QString::fromLatin1((char *)data, len);
  8. LogEvent* event = new LogEvent(QEvent::User);
  9. event->setCmd(0x00);
  10. event->setData(str_data);
  11. QApplication::postEvent(gWidget, event);
  12. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/81699
推荐阅读
相关标签
  

闽ICP备14008679号