gpt4 book ai didi

python - 在两个不直接相关的小部件之间进行通信

转载 作者:行者123 更新时间:2023-12-05 05:38:08 25 4
gpt4 key购买 nike

我有一个带有小部件的 GUI,里面有多个子小部件,如图所示:

enter image description here

我想将“Widget 2-2”与“Widget 1-1”进行通信。我有不同的选择,但我不知道哪个更好。

1。传播信号

我的第一个想法是将发射传播到主窗口,然后将操作传播到目标小部件:

  1. 小部件 2-2 发出信号
  2. 小部件 2 捕获发出并发出另一个信号
  3. 主窗口捕获发射并调用 Widget 1 Controller 函数
  4. Widget 1 Controller 函数调用 Widget 1-1 Controller 函数
  5. 小部件 1-1 执行操作

优点

  • 所有的小部件只与它的 parent 和 child 对话

缺点

  • 可能有点乱

2。创建一个包含所有信号的单例类

另一个想法是在单例类中创建信号。然后 Widget 2-2 可以轻松发出此信号,Widget 1-1 也可以轻松收听此信号。小部件在体系结构中的相对位置无关紧要,每个人都可以发出和连接信号。

优点

  • 发射和连接此信号非常简单。每个人都可以做到。

缺点

  • 我觉得这是个非常糟糕的主意。估计以后会爆炸,但不知道为什么。我更愿意遵循最佳实践,而不是快速轻松地解决我的问题(目前...)

最佳答案

单例或静态初始化应该是最后的手段,因为它们会导致各种令人头疼的问题,尤其是在多线程环境中。在这种情况下绝对不要这样做。

在这种情况下,我个人在我的项目中所做的是,我在第一个小部件中发出一个信号,然后在第一个公共(public)父部件中将其转发到第二个小部件,以便第二个小部件通过其在其中的插槽处理它。

至少,这对我来说效果很好。您可以在 Qt 中很好地转发信号,即将信号连接到信号。

第一个公共(public)父级将同时包含这两者,因此您可以将其用作代理来管理您的架构中的这两者,甚至可能更多的小部件。

关于python - 在两个不直接相关的小部件之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73006164/

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