我正在使用一些我没有编写的代码,并且对基本上将信号和插槽用于绝对一切的做法感到困惑。
我理解使用它们来向上通信依赖树(基本上,用作回调)。例如,如果我们有以下类:
MainWindow
-> SomeDialog
-> SomeView
->SomeModel
...并且SomeModel
能够改变一些共享的应用程序状态,它可能会发出一个changed()
连接到插槽的SomeView
信号,然后再发送一个信号到SomeDialog
,等等。
这很有价值,因为它确保了对象与其子对象之间没有循环依赖;SomeModel
无需了解任何关于SomeView
它或其父母的信息即可与之交流。
但是你为什么要反过来呢?也就是说,如果我有AnotherDialog
,AnotherView
和AnotherModel
, 并且AnotherModel
需要知道状态何时发生变化SomeModel
,我为什么要使用信号向下进行通信?信号传播路径最终为:
SomeModel
-> SomeView
-> SomeDialog
-> MainWindow
-> AnotherDialog
-> AnotherView
->AnotherModel
这很难调试,令人困惑,并且(据我所知)完全没有必要。一旦信号传播到MainWindow
,它可以AnotherDialog
直接在其实例上调用一个方法,不需要信号......对吗?
我意识到这个问题可能过于模糊,但我想确保在重构所有旧代码之前不会忽略一些 Qt 设计原则。