使用 qobject 基础的多重继承

Posted

技术标签:

【中文标题】使用 qobject 基础的多重继承【英文标题】:Multiple inheritance with qobject base 【发布时间】:2012-08-26 15:28:07 【问题描述】:

代码示例:

class TestOne : public QWidget // To fix this i need to modify  class QWidget : public virtual QObject; which belongs to qt

  // ...
;

class TestTwo : public virtual QObject

  // ...
;

class Test : public TestOne, public TestTwo

 // ...
;

还有什么其他方法可以解决这个问题?

【问题讨论】:

最好的方法是不要在混合使用 QObject 的多重继承。尝试重新设计,这样你就不需要它了。 Qt 不支持来自 QObject 的 MI(据我所知);使用普通聚合 + 成员调用传播将第二个类的行为放入结果类中。 【参考方案1】:

QObject 不是为多重继承而设计的。 QObject 不支持从另一个 QObjects 进行多重继承。如果你从两个类继承,只有第一个可以是 QObject,第二个不是http://qt-project.org/doc/qt-4.8/moc.html

不支持使用 QObject 进行虚拟继承。

您可以在两个 QObject 之间建立关联并在它们之间转发信号。

您可以以一种不需要信号/插槽且不从 QObject 继承的方式抽象您的常用功能。然后继承它。然后将 MI 中的 QObject 免费课程与您的课程混合。您可以通过 Derived QObject 中的信号/插槽将调用转发到那些继承的方法

【讨论】:

为什么不直接调用方法呢?您可能的意思是转发槽调用结束信号发射。还是不行? 是的,你在QObject继承类的槽中抓取信号,然后调用非QObject类的方法。

以上是关于使用 qobject 基础的多重继承的主要内容,如果未能解决你的问题,请参考以下文章

QObject 多重继承

QObject的多重继承

为啥在多重继承的情况下QObject需要是第一个

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

Qt中图元对象的多重集成

Qt 多重继承和信号