我有一个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
. 但为什么这是个问题?eg 的情况不也是这样QAbstractScrollArea
,它继承自QFrame
,又继承自QWidget
?它们都以 aQWidget
作为父级,尽管QAbstractScrollArea
只是间接继承自QWidget
. 不幸的是,我在文档和命名小部件类的 .cpp 文件中都找不到答案。
既然我不能通过QObject
父母,还有没有办法使用Qt的父子系统来销毁我派生的批处理项目?