从另一个线程更新QT小部件的一种不那么冗长的方法?

时间:2018-04-01 18:36:49

标签: c++ multithreading qt

我正在编写一个QT应用程序,它接收我需要从另一个线程更新的其他线程上的消息。我正在使用连接和插槽,但创建一个信号并将其连接到我想在每个小部件上调用的每个函数都变得难以想象。还有更好的方法吗?

这是一个例子:

class StateWidget : public QWidget, public AbstractTab {
 Q_OBJECT

  \\ ...

 signals:

  void SetLeftVelocity(QString str);
  void SetRightVelocity(QString str);
  void SetLeftCurrent(QString str);
  void SetRightCurrent(QString str);

  \\ there are ~30 more of these lines. very annoying!
  \\ ...
}

在我的构造函数中,我需要所有的连接......

  connect(this, SIGNAL(SetLeftVelocity(QString)), ui_->left_velocity_edit,
          SLOT(setText(QString)), Qt::QueuedConnection);
  connect(this, SIGNAL(SetRightVelocity(QString)), ui_->right_velocity_edit,
          SLOT(setText(QString)), Qt::QueuedConnection);
  connect(this, SIGNAL(SetLeftCurrent(QString)), ui_->left_current_edit,
          SLOT(setText(QString)), Qt::QueuedConnection);
  connect(this, SIGNAL(SetRightCurrent(QString)), ui_->right_current_edit,
          SLOT(setText(QString)), Qt::QueuedConnection);
  connect(this, SIGNAL(SetLeftAcceleration(QString)), ui_->left_acceleration_edit,
  \\ so many more...

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

如果信号和插槽属于同一个类(在你的例子中似乎是这种情况),那么它都被封装了,所以我不认为这里存在问题。

但是如果你要混合来自不同类的信号和插槽,我宁愿选择某种Observer pattern设计而不是连接单个构造函数中的所有信号/插槽。