2010-05-12 13 views
2

如果我要創建我自己的類進myWidget從QWidget的繼承我以下的Qt教程,並得到一個簡單的問題

教程告訴我寫的構造是這樣的...

MyWidget::MyWidget(QWidget *parent) 
: QWidget(parent){....} 

我不知道QWidget(父)的作用是什麼?

這是否意味着顯式調用QWidget的構造函數?

回答

5

是的。在C++中,如果您希望運行,則必須在構造函數的initialization list中顯式調用基類的構造函數。在這種情況下,將在運行構造函數中的代碼之前運行QWidget(parent)。順便說一句,這不僅僅是一個Qt事物,而且在C++繼承中也很常見。

0

"yours" Qt的教程:因爲此類從QWidget的繼承,新階級是一個小部件,也可以是頂層窗口或子控件(如QPushButton在前面的章節)

祝你好運!

2

除了以前的答案:

喜歡有人提到,如果你小部件父母不爲空將被渲染只是父部件內。

2如果父窗口小部件被刪除,您的所有子窗口小部件也將被刪除操作員刪除。

正確執行默認的窗口部件的構造應該是以下幾點:

class MyWidget: public QWidget { 
    Q_OBJECT 
    public: 
     explicit MyWidget(QWidget *parent = 0); 
} 

MyWidget::MyWidget(QWidget *parent = 0): QWidget(parent) { 
    // Your own initialization code 
} 

儘量避免specifing非零父堆棧部件。你最好永遠在路上創建嵌套小部件:

QWidget *parentWidget; 
MyWidget myWidget = new MyWidget(parentWidget); 

你可以在這裏閱讀更多: http://doc.trolltech.com/4.6/objecttrees.html

0

這就是所謂的在C++中初始化列表,是的,這是給QWidget的構造函數的顯式調用。默認情況下,C++調用基類的構造函數的無參數版本,除非初始化列表中有明確的調用。通常認爲一個好的設計是類的成員的初始化由該類的構造函數處理 - Qt遵循這個約定。所以,在這裏你傳遞了一個指向它的基類的構造函數的指針,所以它可以將它存儲在它的一個成員變量中。