Tyl*_*nry 19 c++ qt signals-slots
假设我有一个MyWidget包含一个MySubWidget,例如包含文本字段或其他东西的自定义小部件.我希望其他类能够连接到包含的MySubWidget实例公开的信号和插槽.传统的方法是这样做:
MySubWidget通过subWidget()in中的方法公开指向实例的指针MyWidget MySubWidget中的MyWidget类,并用"转发"的代码选择1似乎是最少的代码,但它也有点破坏封装,因为现在其他类知道包含的小部件MyWidget是什么并且可能依赖于它们的功能.
选择2似乎保持封装,但它有很多看似冗余且可能错综复杂的代码,这会扰乱整个信号和插槽系统的优雅.
在这种情况下通常做什么?
ric*_*dwb 19
如果你看看Qt自己的代码,他们更喜欢选项2.
例如,查看QTabWidget和QTabBar.它们共享许多信号和插槽,但QTabWidget隐藏了它使用QTabBar的事实(好吧,排序...... QTabWidget::tabBar()即使它受到保护,显然也会破坏它).
虽然这会产生更多代码,但我认为这对于封装来说是值得的.
不要忘记你可以将信号连接到这样的信号:
connect(mySubWidget, SIGNAL(internalSignal(int)), this, SIGNAL(externalSignal(int)));
Run Code Online (Sandbox Code Playgroud)
哪个会在MyWidget发出externalSignal(int)时MySubWidget发光internalSignal(int).这至少对信号方面有帮助.不幸的是,我不知道为插槽做同样的简单方法.
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |