gpt4 book ai didi

c++ - 什么时候适合使用 Qt 信号向下通信依赖树?

转载 作者:行者123 更新时间:2023-11-28 07:32:05 25 4
gpt4 key购买 nike

我正在处理一些我没有编写的代码,并且对本质上对所有事情都使用信号和插槽的做法感到困惑。

我理解使用它们来传达依赖关系树(基本上,用作回调)。例如,如果我们有以下类:

MainWindow -> SomeDialog -> SomeView -> SomeModel

... 而 SomeModel 能够改变一些共享的应用程序状态,它可能会发出一个信号 changed() 连接到 SomeView 的插槽,它又向 SomeDialog 等发送信号

这是有值(value)的,因为它确保了对象与其子对象之间没有循环依赖; SomeModel 不需要了解任何关于 SomeView 或其父级的信息就可以与之通信。

但是为什么要反过来?也就是说,如果我有 AnotherDialogAnotherViewAnotherModel,并且 AnotherModel 需要知道状态何时更改在 SomeModel 中,为什么我要使用信号在向下 方向进行通信?信号传播的路径最终是:

SomeModel -> SomeView -> SomeDialog -> MainWindow -> AnotherDialog > -> AnotherView -> AnotherModel

这很难调试、令人困惑,而且(据我所知)完全没有必要。一旦信号传播到 MainWindow,它就可以直接在其 AnotherDialog 实例上调用方法,不需要信号......对吧?

我意识到这个问题可能过于模糊,但我想确保在重构​​所有旧代码之前我没有忽略一些 Qt 设计原则。

最佳答案

使用信号的唯一原因可能是因为 AnotherDialogAnotherView 和/或 AnotherModel 有不同的 thread affinities (但即便如此,使用 QMetaObject::invokeMethod() 可能更可取)。

如果所有这些类都存在于一个线程中,那么就没有任何理由使用信号。

此处似乎确实存在其他设计缺陷,但查看您的评论似乎您已经意识到了这些缺陷。

关于c++ - 什么时候适合使用 Qt 信号向下通信依赖树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17456435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com