使用QObject基类的多重继承

8

代码示例:

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
{
 // ...
};

有没有其他方法来解决这个问题?

4
最好不要在QObject混合中使用多重继承。尝试重新设计,以便您不需要它。 - Mat
据我所记,Qt不支持从QObject继承MI; 请使用纯聚合+成员调用传播将第二个类的行为合并到结果类中。 - mlvljr
1个回答

12

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

在QObject中不支持虚继承。

你可以将两个QObjects之间建立关联,并在它们之间传递信号。

你可以将通用的功能抽象出来,不需要使用信号/槽机制,也不需要从QObject继承该功能,然后从这个类继承,并将此QObject-free类与你的类混合使用。你可以通过从派生的QObject转发调用那些继承方法的信号/槽来实现。


为什么不直接调用方法呢?你可能是想转发槽调用和信号发射。或者不是这样吗? - mlvljr
是的,您可以在继承自QObject的类的槽中捕获信号,然后调用非QObject类的方法。 - Neel Basu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接