在Qt中,如何使用具有多重继承的Q_对象插槽和信号?

在Qt中,如何使用具有多重继承的Q_对象插槽和信号?,qt,qobject,Qt,Qobject,我浏览了相关的问题,找不到任何与我所谈论的内容完全相符的东西,所以让我来描述一下 我有一个类,比如说foo,它需要有自己的插槽和信号,但也需要从qxmldaulthandler继承(听起来很奇怪,但我在尝试使用QHttp将网站直接读入QBuffer时遇到了这种情况) 如果该代码附带一个cpp将bar连接到其他地方的信号,则不会编译。您将收到关于QObject的某些成员不是QXmlDefaultHandler成员的错误。另外,您不能移动Q_对象,否则您会因为没有实现某些东西而得到vtable错误(

我浏览了相关的问题,找不到任何与我所谈论的内容完全相符的东西,所以让我来描述一下

我有一个类,比如说foo,它需要有自己的插槽和信号,但也需要从qxmldaulthandler继承(听起来很奇怪,但我在尝试使用QHttp将网站直接读入QBuffer时遇到了这种情况)

如果该代码附带一个cpp将bar连接到其他地方的信号,则不会编译。您将收到关于QObject的某些成员不是QXmlDefaultHandler成员的错误。另外,您不能移动Q_对象,否则您会因为没有实现某些东西而得到vtable错误(继续!试试!)

请看我的答案(非常简单)修复。如果我认为你解释得比我好,我会把你作为被接受的答案

编辑:对于C++和QT VET,如果你能更好地解释它,请发布答案。我花了很多时间查找这些信息,所以如果你能做得比我好,请帮助其他人

class foo: public QObject, public QXmlDefaultHandler
{
    public:
        foo();
        ~foo();
   Q_OBJECT
   public slots:
       void bar();
}
听起来很简单,如果你不把QObject放在继承列表的第一位,这个任务是不可能的。这是Qt元对象系统的一个限制。如果不这样做,编译器将尝试将QObject的一些成员作为QXmlDefaultHandler的一部分应用。

声明在多重继承的情况下,提供QObject的类应首先出现

如果使用多重继承, moc假设第一个 类是QObject的一个子类。也, 确保只继承第一个 类是一个QObject

 // correct
 class SomeClass : public QObject, public OtherClass
 {
     ...
 };
使用QObject的虚拟继承是 不支持

 // correct
 class SomeClass : public QObject, public OtherClass
 {
     ...
 };