2012-02-08 10 views
5

Mam klasy, która dziedziczy QObjectBatchItem, 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?

Odpowiedz

4

Nie można wywołać konstruktora bazowego QObject. Nie ma znaczenia typ parametru nadrzędnego, ale wywołanie QObject (rodzic QObject *). Powinieneś wywołać w tym przypadku BatchItem() bez parametru i wywołać setParent (rodzic) w ciele konstruktora lub przetaktować BatchItem (QObject *).

+0

I overloaded BtorItem ctor, który pomógł. Dzięki! – steps

Powiązane problemy