我有类似下面的类设计,我想知道我是否可以使用许多信号槽连接来进行通信。有一个MainWindow
类,它包含所有GUI,然后是一个Wrapper
类,它提供了后端的接口,然后有一个Controller
类用于生成和管理线程,最后有Worker
个完成所有工作。
现在假设我正在加载文件,并希望使用MainWindow
中的进度条显示进度。我的Worker
类将updateProgress(int progress)
发送到Controller::handleProgress(int progress)
插槽,再次将进度信号发送到Wrapper
类,后者将进度信号发送到主窗口,最后更新进度条。
同样,当数据加载后,它将在Wrapper
类中进行处理,并再次通过信号和插槽进行通信(尽管只需少一步)。
这是在Qt中做事的标准方式还是我应该重新考虑我的设计?
答案 0 :(得分:12)
这是一种有效的可能性。
请注意,Qt允许您更进一步,并执行以下操作:
QObject::connect(&sender, SIGNAL(mySenderSignal(int)),
&receiver, SIGNAL(myReceiverSignal(int));
没错,你可以将信号绑定到信号上。所有这一切都可以被视为" 当发送发送者的信号时,发出接收者的信号"。
如果您没有在中间插槽中执行任何特定任务,这可能会为您节省几行费用,同时准确显示您正在执行的操作:您已转发"转发& #34;一个信号。否则,如果你必须在两者之间绝对工作,那么你必须保留信号和插槽。
请注意,您仍然需要确保信号签名匹配。