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

San*_*nto 6 qt qobject

我查看了相关的问题,找不到任何能解决我所说的内容的内容,所以让我来描述一下.

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

class foo: public QXmlDefaultHandler, public QObject
{
    public:
        foo();
        ~foo();

       Q_OBJECT
   public slots:
       void bar();
}
Run Code Online (Sandbox Code Playgroud)

这个代码,如果附带一个cpp连接条到其他地方的信号,将无法编译.您将获得有关QObject的某些成员不是QXmlDefaultHandler成员的错误.另外,你不能移动Q_OBJECT,否则你会因为没有实现某些东西而得到vtable错误(继续!试试吧!).

请看(非常简单)修复我的答案.如果我认为你比我更好地解释它,我会接受投票给你作为公认的答案.

编辑:对于你c ++和Qt兽医,如果你能更好地解释它,请发一个答案.我花了很多时间查看这些信息,所以如果你能做得比我好,请帮助别人.

Pau*_*xon 12

moc文档指出,在多重继承的情况下,提供QObject的类应首先出现

如果使用多重继承,则moc假定第一个继承的类是QObject的子类.另外,请确保只有第一个继承的类是QObject.

 // correct
 class SomeClass : public QObject, public OtherClass
 {
     ...
 };
Run Code Online (Sandbox Code Playgroud)

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