题
我通过相关问题望去,找不到任何地址正是我在说什么,所以让我形容。
我有一个类,比方说foo的,需要有自己的插槽和信号,还需要从QXmlDefaultHandler继承(听起来很奇怪的,而是试图直接使用QHTTP阅读的网站变成一个时,我遇到过这种情况Q缓冲器)。
class foo: public QXmlDefaultHandler, public QObject
{
public:
foo();
~foo();
Q_OBJECT
public slots:
void bar();
}
这个代码,如果伴随有CPP到杆连接到一个信号别处,将不编译。你会得到有关的QObject不是QXmlDefaultHandler成员的一些成员的错误。此外,您不能移动Q_OBJECT,否则你得到的vtable错误,不实施一些事情(去!试试吧!)。
请看看我的(很简单)答案解决。我会招待你投票作为公认的答案,如果我想你解释它比我更好。
编辑:为你的C ++和Qt兽医,请张贴的答案,如果你能更好地解释它。我花了相当多的时间了寻找这个信息,所以请帮助别人,如果你可以做得比我更好。
解决方案
用于MOC的文档一>指出,在多重继承的情况下,提供的QObject类应首先出现
如果使用的是多重继承, 商务部假定第一继承 类是QObject的一个子类。也, 确保只有第一继承 类是一个QObject。
// correct class SomeClass : public QObject, public OtherClass { ... };
与QObject的虚拟继承是 不支持的。
其他提示
class foo: public QObject, public QXmlDefaultHandler
{
public:
foo();
~foo();
Q_OBJECT
public slots:
void bar();
}
由于简单,因为它的声音,如果你不把QObject的第一继承列表,这个任务是不可能的。这是在Qt的元对象系统的限制。如果你不这样做,编译器将尝试QObject的一些成员适用,QXmlDefaultHandler的一部分。
不隶属于 StackOverflow