這是一個普遍的問題,我將用兩個例子來說明。家長和二傳手
第一個例子:假設我有一個小部件,與之相關聯的佈局:
QWidget myWidget;
QVBoxLayout* mainLayout = new QVBoxLayout(&myWidget);
注意,我指定我的widget作爲我的佈局的父。問題是,這足以佈局與我的小部件相關聯,或者我必須在另外明確設置佈局:
myWidget.setLayout(mainLayout);
如果我必須明確地設置佈局,然後AFAIK設置也會做進myWidget我的佈局的父項,那麼在構造函數中指定父項的要點是什麼?
第二個例子:
假設我有一個行編輯和一個驗證器。
QLineEdit* lineEdit = new QLineEdit(whatever);
QIntValidator* validator = new QIntValidator(0, 100, lineEdit);
請注意,我已經爲我的驗證器設置了父項。爲了驗證爲「工作」,即聽lineEdit的值更改事件,我也有明確設置驗證在
lineEdit->setValidator(validator);
如果是這樣,將setValidator將函數本身設定的父母,如果那麼,爲什麼我應該在校驗器的構造函數中指定父項呢?
希望我的問題很明確。
如果您看看Qt文檔中的示例,大多數(all?)都不會「在構造函數中指定父項」,以免用於小部件和佈局。你可能不應該。 – Mat
@Mat:你的意思是說,在這兩種情況下,我都*必須調用set ***函數? –
當您使用行編輯構造驗證器作爲父項時,您不會將驗證器設置爲行編輯 - 這僅僅定義了QObject的層次結構和對象所有權。我認爲你不需要在這裏混合分層和功能的概念。 – vahancho