ste*_*eps 5 qt parent-child 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
Run Code Online (Sandbox Code Playgroud)
继承自的类的示例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
Run Code Online (Sandbox Code Playgroud)
这是相应的.cpp:
#include "videobatchitem.h"
VideoBatchItem::VideoBatchItem(/* ... */,
QObject *parent) :
/* ... */,
QObject(parent)
{
/* ... */
}
/* ... */
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译时,我收到以下错误:
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’
Run Code Online (Sandbox Code Playgroud)
当然我看到这是正确的,因为QObject它只是间接的基础VideoBatchItem.但为什么这是一个问题呢?是不是也是如此,例如QAbstractScrollArea,继承自QFrame哪个继承自QWidget?他们都把他们QWidget作为他们的父母,虽然QAbstractScrollArea只是间接继承QWidget.不幸的是,我无法在文档和命名小部件类的.cpp文件中找到答案.
由于我无法传递QObject父级,是否还有办法使用Qt的父子系统来销毁我的派生批量项?
您不能调用 QObject 基本构造函数。父参数的类型并不重要,重要的是 QObject(QObject *parent) 的调用。在这种情况下,您应该调用不带参数的 BatchItem() 并在构造函数体中调用 setParent(parent) ,或重载 BatchItem(QObject *) 构造函数。