2012-02-08 9 views
5

私はQObjectを継承するクラスBatchItem、プラスBatchItemから継承するいくつかのクラスがあります。BatchItemから継承したクラスのQObjectが間接的な唯一のクラスでQObjectの親を設定できないのはなぜですか?

#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 

例:

#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) 
{ 
    /* ... */ 
} 

/* ... */ 

しかし、私がコンパイルしようとすると、 lowingエラー:QObjectとして

私はこれが正しいことを確認もちろん
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’ 

は、VideoBatchItemの唯一の間接的な拠点です。しかし、それはなぜ問題なのでしょうか? そのような場合もそうではありませんか? QAbstractScrollAreaであり、QFrameから継承し、次にQWidgetQAbstractScrollAreaQWidgetから間接的にしか継承しませんが、すべてがQWidgetを親として取ります。 残念ながら、ドキュメントや名前付きウィジェットクラスの.cppファイルには答えが見つかりませんでした。

私はQObjectの親を渡すことができないので、Qtの親子システムを派生バッチアイテムの破壊に使用する方法はありますか?

答えて

4

QObjectベースのコンストラクタを呼び出すことはできません。親パラメータの型は問わず、QObjectの呼び出し(QObject * parent)は重要です。この場合は、パラメータなしでBatchItem()を呼び出し、コンストラクタ本体でsetParent(parent)を呼び出すか、BatchItem(QObject *)コンストラクタをオーバーロードする必要があります。

+0

私はBatchItem ctorをオーバーロードしました。どうも! – steps

関連する問題