【发布时间】:2012-02-08 23:55:42
【问题描述】:
我有一个继承 QObject 的类 BatchItem,还有几个继承自 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 的父子系统来销毁我派生的批处理项?
【问题讨论】:
标签: qt parent-child qobject