gpt4 book ai didi

c++ - 暴露所包含小部件的信号/插槽的正确 Qt 习惯用法是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:57:28 30 4
gpt4 key购买 nike

假设我有一个 MyWidget 包含一个 MySubWidget,例如包含文本字段或其他内容的自定义小部件。我希望其他类能够连接到包含的 MySubWidget 实例公开的信号和插槽。是传统的方法吗:

  1. 通过MyWidget中的subWidget()方法暴露一个指向MySubWidget实例的指针
  2. MyWidget类中复制MySubWidget的信号和槽,编写“转发”代码
  3. 还有什么?

选择 1 似乎是最少的代码,但它也打破了封装,因为现在其他类知道 MyWidget 包含的小部件是什么,并且可能依赖于它们的功能。

Choice 2 看起来像是在保持封装,但它有很多看似多余且可能令人费解的代码,有点搞砸了整个信号和插槽系统的优雅。

在这种情况下通常会怎么做?

最佳答案

如果您查看 Qt 自己的代码,他们更喜欢选项 2。

例如,查看 QTabWidgetQTabBar .它们共享许多信号和插槽,但 QTabWidget 隐藏了它使用 QTabBar 的事实(嗯,排序... QTabWidget::tabBar() 显然会破坏这一点,即使它受到保护)。

虽然这会导致更多的代码,但我认为封装是值得的。

不要忘记您可以像这样将信号连接到信号:

connect(mySubWidget, SIGNAL(internalSignal(int)), this, SIGNAL(externalSignal(int)));

MySubWidget 发出 internalSignal(int) 时,这将使 MyWidget 发出 externalSignal(int)。这至少有助于信号方面的事情。不幸的是,我不知道有什么简单的方法可以为插槽做同样的事情。

关于c++ - 暴露所包含小部件的信号/插槽的正确 Qt 习惯用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557375/

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