2012-02-08 42 views
5

我有一個類BatchItem繼承QObject,加上幾類,從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) 
{ 
    /* ... */ 
} 

/* ... */ 

但是當我嘗試編譯時,我得到了fol降脂錯誤:

error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’ 

當然,我看到,這是正確的,因爲QObject只是VideoBatchItem間接基地。但爲什麼這是一個問題? 對於例如QAbstractScrollArea,它繼承自QFrame,它繼而從QWidget繼承?他們都以QWidget作爲他們的父母,但QAbstractScrollArea僅間接從QWidget繼承。 不幸的是,我無法在命名控件類的文檔或.cpp文件中找到答案。

由於我不能通過QObject父母,是否還有一種方法可以使用Qt的父子系統銷燬我的派生批處理項目?

回答

4

你不能調用QObject的基礎構造函數。關於父參數的類型並不重要,但調用QObject(QObject * parent)。在這種情況下,您應該調用BatchItem()而不使用參數,並在構造函數體中調用setParent(parent),或者重載BatchItem(QObject *)構造函數。

+0

我重載了BatchItem ctor,這有幫助。謝謝! – steps 2012-02-08 18:55:43

相關問題