使用 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 基础的多重继承的主要内容,如果未能解决你的问题,请参考以下文章