J'ai une classe BatchItem
qui hérite QObject
, ainsi que plusieurs classes qui héritent de BatchItem
:Pourquoi ne puis-je pas définir un parent QObject dans une classe dont QObject n'est qu'une base indirecte?
#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
Exemple d'une classe qui hérite de 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
Et c'est le cpp correspondant:
#include "videobatchitem.h"
VideoBatchItem::VideoBatchItem(/* ... */,
QObject *parent) :
/* ... */,
QObject(parent)
{
/* ... */
}
/* ... */
Mais quand j'essaie de compiler, j'obtiens le fol erreur mugissement:
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’
Bien sûr, je vois que cela est exact, comme QObject
est seulement une base indirecte de VideoBatchItem
. Mais pourquoi est-ce un problème? N'est-ce pas aussi le cas pour, par exemple, QAbstractScrollArea
, qui hérite de QFrame
, qui à son tour hérite de QWidget
? Ils prennent tous un QWidget
comme parent, bien que QAbstractScrollArea
n'hérite qu'indirectement de QWidget
. Malheureusement, je n'ai pas trouvé de réponse à cela dans la documentation ni dans les fichiers .cpp des classes de widgets nommés.
Étant donné que je ne peux pas passer un parent QObject
, est-il toujours possible d'utiliser le système parent-enfant de Qt pour la destruction de mes éléments de traitement par lots dérivés?
J'ai surchargé le ctor BatchItem, qui a aidé. THX! – steps