【发布时间】:2017-09-24 08:01:01
【问题描述】:
在 C++ Qt 中有一个类QWidget
- 类
A继承QWidget并增加了一些特性 - 类
B继承A并增加了一些特性 - 类
C继承B并增加了一些特性,C必须是QWidget类型并且应该做所有B做的事情
由于某种原因C 的行为不如预期,我必须重写类C。我无法将代码修改为 B 创建类。
我该如何解决这个问题?有什么设计模式,还是别的什么?
如果我尝试继承QWidget和B,一个多重继承,会有两个QWidget导致问题(QObject - moc不允许这样做)。
如果我从QWidget 继承并将B 的对象传递给C 的构造函数,那么B 执行的任何操作都适用于通过B 的另一个QWidget,这是不希望的,所有功能B 提供的应该适用于我的C 的QWidget。
【问题讨论】:
-
首先想到的是看看Decorator pattern。此处的其他参考:Decorator Design Pattern.
-
由于某种原因,C 的行为不符合预期也许你应该问一个问题(显示一些细节,以便我们可以提供帮助)。如果我们知道问题所在,也许我们可以解决它。
-
类 C 继承 B 并增加了一些特性,C 必须是 QWidget 类型并且应该做所有 B 做的事情 确实应该这没问题。
C将是其父级的QWidget。 -
@drescherjm 问题是 B 正在对 Qwidget 的布局做一些事情,导致用户界面不正确,而我没有 B 的来源。
-
@PhilBrubaker ,我已经完全看到了装饰器设计模式,但它看起来并不能解决我的问题。它说将一个类的对象传递给另一个类,如果我将 B 的对象传递给 C 的构造函数,则 B 在内部对其 QWidget 所做的操作将持续存在。
标签: c++ qt class-design