我有类似以下类的设计,我想知道我是否可以使用许多信号槽连接在它们之间进行通信。有一个包含所有 GUI 的 MainWindow
类,然后是一个为后端提供接口(interface)的 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));
没错,你可以将一个信号绑定(bind)到一个信号上。它所做的一切可以看作是“当发出发送者的信号时,发出接收者的信号”。
如果您在中间槽中没有任何特定任务要执行,这可能会为您节省几行,同时准确显示您在做什么:您正在“转发”信号。否则,如果您绝对必须在两者之间进行工作,那么您必须保留信号和槽。
请注意,您仍然必须确保信号签名匹配。
关于c++ - 可以多次链接信号和插槽吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426860/