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

jah*_*aho 9 c++ qt multithreading signals

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

现在让我们说我正在加载一个文件,并希望使用进度条显示进度MainWindow.我的Worker班级发送updateProgress(int progress)Controller::handleProgress(int progress)插槽,再次向Wrapper课程发送进度信号,然后向主窗口发送进度信号,最后更新进度条.

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

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

JBL*_*JBL 12

这是一种有效的可能性.

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

QObject::connect(&sender, SIGNAL(mySenderSignal(int)),
                 &receiver, SIGNAL(myReceiverSignal(int));
Run Code Online (Sandbox Code Playgroud)

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

如果您没有在中间插槽中执行任何特定任务,那么可能会节省几行,同时准确显示您正在做的事情:您正在"转发"信号.否则,如果你必须在两者之间绝对工作,那么你必须保留信号和插槽.

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