Почему я не могу установить родительский объект QObject в классе, для которого QObject является только косвенной базой?

У меня есть класс BatchItem , который наследует QObject , плюс несколько классов, наследуемых от BatchItem :

#ifndef BATCHITEM_H
#define BATCHITEM_H

#include <QObject>

class BatchItem : public QObject
{
    Q_OBJECT
public:
    virtual void start() = 0;
    virtual void stop() = 0;

signals:
    /* ... some signals ... */

};

#endif // BATCHITEM_H

Пример класса, наследующего из BatchItem :

#ifndef VIDEOBATCHITEM_H
#define VIDEOBATCHITEM_H

#include "batchprocessing/batchitem.h"

#include <QtCore/QObject>

class VideoBatchItem : public BatchItem
{
    Q_OBJECT
public:
    explicit VideoBatchItem(/* ... */, QObject *parent = 0);

    void start();
    void stop();

private:
    /* ... some private member variables ... */
};

#endif // VIDEOBATCHITEM_H

И это соответствующий .cpp:

#include "videobatchitem.h"

VideoBatchItem::VideoBatchItem(/* ... */,
                               QObject *parent) :
    /* ... */,
    QObject(parent)
{
    /* ... */
}

/* ... */

Но когда я пытаюсь скомпилировать, я получаю следующую ошибку:

error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’

Конечно, я вижу, что это правильно, поскольку QObject является лишь косвенной базой VideoBatchItem . Но почему это проблема? Разве это не относится, например, к QAbstractScrollArea , который наследуется от QFrame , который, в свою очередь, наследуется от QWidget ? Все они берут QWidget в качестве своего родителя, хотя QAbstractScrollArea только косвенно наследуется от QWidget . К сожалению, я не смог найти ответа на этот вопрос ни в документации, ни в файлах .cpp названных классов виджетов.

Поскольку я не могу передать родительский объект QObject , есть ли еще способ использовать систему родитель-потомок Qt для уничтожения моих производных элементов пакета?

5
задан steps 8 February 2012 в 14:52
поделиться