将信号和插槽连锁几次可以吗

Is it OK to chain signals and slots several times?

本文关键字:几次 信号 插槽      更新时间:2023-10-16

我有类似于以下类的设计,我想知道我是否可以使用许多信号槽连接在它们之间进行通信。有一个MainWindow类保存所有GUI,然后是Wrapper类,它为后端提供接口,然后是用于生成和管理线程的Controller类,最后是负责所有工作的Worker

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

类似地,当数据被加载时,它在Wrapper类中被处理,并且再次通过信号和时隙进行通信(尽管少了一步(。

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

这是一种有效的可能性。

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

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

没错,你可以把一个信号绑定到一个信号上。它所做的一切都可以被视为"当发送器的信号发出时,发出接收器的信号"。

如果你在中间插槽中没有任何特定的任务要执行,这可能会为你节省几行,同时准确地显示你在做什么:你正在"转发"一个信号。否则,如果你必须在两者之间做工作,那么你必须保留信号和插槽。

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