如果我要創建我自己的類進myWidget從QWidget的繼承我以下的Qt教程,並得到一個簡單的問題
教程告訴我寫的構造是這樣的...
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}
我不知道QWidget(父)的作用是什麼?
這是否意味着顯式調用QWidget的構造函數?
如果我要創建我自己的類進myWidget從QWidget的繼承我以下的Qt教程,並得到一個簡單的問題
教程告訴我寫的構造是這樣的...
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}
我不知道QWidget(父)的作用是什麼?
這是否意味着顯式調用QWidget的構造函數?
是的。在C++中,如果您希望運行,則必須在構造函數的initialization list中顯式調用基類的構造函數。在這種情況下,將在運行構造函數中的代碼之前運行QWidget(parent)
。順便說一句,這不僅僅是一個Qt事物,而且在C++繼承中也很常見。
從"yours" Qt的教程:因爲此類從QWidget的繼承,新階級是一個小部件,也可以是頂層窗口或子控件(如QPushButton在前面的章節)。
祝你好運!
除了以前的答案:
喜歡有人提到,如果你小部件父母不爲空將被渲染只是父部件內。
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
這就是所謂的在C++中初始化列表,是的,這是給QWidget的構造函數的顯式調用。默認情況下,C++調用基類的構造函數的無參數版本,除非初始化列表中有明確的調用。通常認爲一個好的設計是類的成員的初始化由該類的構造函數處理 - Qt遵循這個約定。所以,在這裏你傳遞了一個指向它的基類的構造函數的指針,所以它可以將它存儲在它的一個成員變量中。