Ho una classe che eredita BatchItem
QObject
, oltre a diverse classi che ereditano da BatchItem
:Perché non posso impostare un genitore QObject in una classe di cui QObject è solo una base indiretta?
#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
Esempio di una classe che eredita da 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
e questo è il corrispondente cpp:
#include "videobatchitem.h"
VideoBatchItem::VideoBatchItem(/* ... */,
QObject *parent) :
/* ... */,
QObject(parent)
{
/* ... */
}
/* ... */
Ma quando provo a compilare, ottengo il Errore di muggiti:
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’
Naturalmente vedo che questo è corretto, come QObject
è solo una base indiretta della VideoBatchItem
. Ma perché questo è un problema? Non è così anche per es. QAbstractScrollArea
, che eredita da QFrame
, che a sua volta eredita da QWidget
? Prendono tutti uno QWidget
come genitore, sebbene l'QAbstractScrollArea
erediti solo indirettamente da QWidget
. Sfortunatamente non sono riuscito a trovare una risposta a ciò né nella documentazione né nei file .cpp delle classi di widget nominate.
Poiché non riesco a passare un genitore QObject
, esiste ancora un modo per utilizzare il sistema padre-figlio di Qt per la distruzione dei miei elementi batch derivati?
Ho sovraccaricato il sensore BatchItem, che ha aiutato. Grazie! – steps