Mam klasy, która dziedziczy QObject
BatchItem
, plus kilka klas, które dziedziczą z BatchItem
:Dlaczego nie można ustawić rodzica QObject w klasie, której QObject jest tylko pośrednią podstawą?
#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
Przykład klasy, która dziedziczy z 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
I to jest odpowiedź .cpp:
#include "videobatchitem.h"
VideoBatchItem::VideoBatchItem(/* ... */,
QObject *parent) :
/* ... */,
QObject(parent)
{
/* ... */
}
/* ... */
Ale kiedy próbuję skompilować, otrzymuję następujące ryk błąd:
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’
Oczywiście widzę, że jest to prawda, ponieważ QObject
jest tylko pośrednim baza VideoBatchItem
. Ale dlaczego to jest problem? Czy nie ma to również miejsca w przypadku np. QAbstractScrollArea
, która dziedziczy po QFrame
, która z kolei dziedziczy po QWidget
? Wszyscy oni biorą QWidget
jako swoich rodziców, chociaż QAbstractScrollArea
tylko pośrednio dziedziczy po QWidget
. Niestety nie mogłem znaleźć odpowiedzi na to ani w dokumentacji, ani w plikach .cpp nazwanych klas widżetów.
Ponieważ nie mogę przekazać rodzicowi QObject
, czy jest jeszcze sposób użycia systemu rodzic-dziecko Qt do zniszczenia moich pochodnych elementów wsadowych?
I overloaded BtorItem ctor, który pomógł. Dzięki! – steps