我有一个类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,而QFrame又继承自QWidget。他们都以QWidget作为父对象,尽管QAbstractScrollArea只是间接继承自QWidget。不幸的是,我在命名小部件类的文档和.cpp文件中都没有找到答案。
由于我不能传递QObject作为父对象,那么还有没有办法使用Qt的父子系统来销毁我的派生批处理项?