多次链接信号和槽是否可行?

12
我有以下类设计,想知道是否可以使用多个信号槽连接它们之间进行通信。有一个MainWindow类,包含所有GUI;然后是一个提供与后台交互接口的Wrapper类;接着是用于生成和管理线程的Controller类;最后是执行所有工作的Worker类。
现在假设我正在加载文件,并希望使用MainWindow中的进度条显示进度。我的Worker类向Controller::handleProgress(int progress)发送updateProgress(int progress)信号槽,然后再将进度信号发送到Wrapper类,后者再返回进度信号给主窗口,最终更新进度条。
同样地,当数据已加载时,在Wrapper类中对其进行处理,并通过信号槽进行通信(尽管步骤少了一个)。
这是在Qt中常见的做法吗?还是我应该重新考虑我的设计?

https://dev59.com/yU_Ta4cB1Zd3GeqPBYWl#54577124 - francek
1个回答

15

这是一个合理的可能性。

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

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

没错,你可以将一个信号绑定到另一个信号。它的作用可以看作是“当发送者的信号被发出时,发射接收者的信号”。

如果在中间的槽函数中没有特定任务需要执行,这可能会为您节省几行代码,同时确切地显示您正在进行的操作:您正在“转发”信号。否则,如果您必须在中间执行工作,则必须保留信号和槽函数。

请注意,仍然必须确保信号签名匹配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接