gpt4 book ai didi

qt - 为什么我不能在 QObject 只是间接基类的类中设置 QObject 父级?

转载 作者:行者123 更新时间:2023-12-01 22:35:26 28 4
gpt4 key购买 nike

我有一个继承 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?尽管 QAbstractScrollArea 仅间接继承自 QWidget,但它们都以 QWidget 作为其父级。不幸的是,我在文档和指定小部件类的 .cpp 文件中都找不到答案。

由于我无法传递 QObject 父级,是否还有办法使用 Qt 的父子系统来销毁我的派生批处理项?

最佳答案

您不能调用 QObject 基本构造函数。父参数的类型并不重要,重要的是 QObject(QObject *parent) 的调用。在这种情况下,您应该调用不带参数的 BatchItem() 并在构造函数体中调用 setParent(parent),或者重载 BatchItem(QObject *) 构造函数。

关于qt - 为什么我不能在 QObject 只是间接基类的类中设置 QObject 父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9195649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com