可以多次链接信号和插槽吗?

时间:2014-05-02 11:17:28

标签: c++ multithreading qt signals

我有类似下面的类设计,我想知道我是否可以使用许多信号槽连接来进行通信。有一个MainWindow类,它包含所有GUI,然后是一个Wrapper类,它提供了后端的接口,然后有一个Controller类用于生成和管理线程,最后有Worker个完成所有工作。

现在假设我正在加载文件,并希望使用MainWindow中的进度条显示进度。我的Worker类将updateProgress(int progress)发送到Controller::handleProgress(int progress)插槽,再次将进度信号发送到Wrapper类,后者将进度信号发送到主窗口,最后更新进度条。

同样,当数据加载后,它将在Wrapper类中进行处理,并再次通过信号和插槽进行通信(尽管只需少一步)。

这是在Qt中做事的标准方式还是我应该重新考虑我的设计?

1 个答案:

答案 0 :(得分:12)

这是一种有效的可能性。

请注意,Qt允许您更进一步,并执行以下操作:

QObject::connect(&sender, SIGNAL(mySenderSignal(int)),
                 &receiver, SIGNAL(myReceiverSignal(int));

没错,你可以将信号绑定到信号上。所有这一切都可以被视为" 当发送发送者的信号时,发出接收者的信号"。

如果您没有在中间插槽中执行任何特定任务,这可能会为您节省几行费用,同时准确显示您正在执行的操作:您已转发"转发& #34;一个信号。否则,如果你必须在两者之间绝对工作,那么你必须保留信号和插槽。

请注意,您仍然需要确保信号签名匹配。