У меня есть класс 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
родителя, есть ли еще способ использовать систему parent-child Qt для уничтожения моих производных элементов пакета?