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

标签 qt qobject

我浏览了相关的问题,找不到与我所说的完全相符的内容,所以让我描述一下。

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

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

       Q_OBJECT
   public slots:
       void bar();
}

如果此代码伴随cpp将bar连接到其他地方的信号,则将无法编译。您将收到有关QObject的某些成员不是QXmlDefaultHandler成员的错误。此外,您不能移动Q_OBJECT,否则会因为未实现某些功能而收到vtable错误(继续!尝试!)。

请查看我的答案(非常简单)。如果我认为您的解释要比我做得更好,我将对您作为接受的答案进行投票。

编辑:对于您的c++和Qt vert ,如果可以更好地解释它,请发布答案。我花了很多时间查找此信息,因此,如果您可以做得比我更好,请帮助其他人。

最佳答案

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

If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.

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

Virtual inheritance with QObject is not supported.

关于qt - 在Qt中,如何使用具有多重继承的Q_OBJECT插槽和信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1489238/

相关文章:

qt4 - 有没有办法在 QObject 中的属性更改时收到通知?

python - 如何在 pyqt4 的 QGraphicsScene 上旋转多边形?

c++ - QML ListView 使用 QList<QObject*> 作为模型

c++ - Qt 代码问题一般可能与 C++ 有关

c++ - 编译时出现信号/槽错误

qt - 为什么我不能在 QObject 只是间接基类的类中设置 QObject 父级?

c++ - 来自directshow sampleCB imediasample的ffmpeg音频帧

c++ - 我可以通过递增指针来移动数组吗? Qt

c++ - QT给某个位置添加Label

qt - 没有什么可以帮助解决 Qt 中的 "Undefined reference to vtable"