C ++中QObject多重继承和策略/特征设计的问题

时间:2011-07-27 11:01:25

标签: c++ qt multiple-inheritance qobject

我正在业余时间构建一个相当大的插件驱动的应用程序,并且遇到了停止设计缺陷的节目。我的应用程序使用基于策略/特征的设计,但因为我使用Qt,它只通过MI(而不是模板和MI)完成。其中一些类是纯虚拟的,有些类在最终用户永远不会触及的情况下执行相当重要的功能。

我的问题是这些类中的一些需要信号/插槽,因此从QObject派生,没有问题,我几乎可以从它继承。但是,我遇到的问题是当我想从Qt类派生,然后用我的一个或多个特征扩展它时,例如:

class Sy_abstractGLViewport : public QGLWidget, public Sy_saveable, public Sy_abstractObject
{
    ...
}

这里QGLWidget是从QObject派生的,但不是虚拟的,导致模糊问题。

我已经考虑过Bridge模式,例如我在Sy_saveable纯虚拟中创建它,然后从中获取包含实际实现的Sy_saveable_imp。然后通过聚合将其用于我的Sy_abstractGLViewport

这对我来说似乎相当不专业,因为该应用程序是基于插件的,对于我未来的插件编写者而言,它是将所有接口方法“连接”到聚合实例的PITA。我甚至无法通过宏自动化它,因为最终用户可能想要覆盖一个方法。

有没有人可以解决这个问题?或者一种不需要MI而是给我同样灵活性的模式?这是我的个人爱好项目,我不介意做很多重构 - 我想这样做正确

1 个答案:

答案 0 :(得分:1)

您不能从继承QObject的multiples clasess继承。

尝试使用合成而不是继承。请参阅composition over inheritance

您也可以尝试使用Q3Signal课程。虽然根据QT doc它属于旧的QT3:

  

Q3Signal类可用于为不支持的类发送信号   继承QObject。