2010-06-07 79 views
6

假設我們有一個QWidget和一個名爲general_layoutQLayout,其中包含其他小部件和佈局。 general_layout被設置爲QWidget佈局是這樣的:Qt - 更改QWidget佈局

setLayout(general_layout) 

現在我應該改變QWidget內容。我怎樣才能做到這一點?我試圖刪除併爲QWidget創建新佈局,並將該新佈局設置爲QWidget的佈局,但無法成功完成我的意圖。

這是我的代碼:

delete general_layout; 
general_layout = new QHBoxLayout; 
general_layout->addLayout(some_layout); 
myQWidget->setLayout(general_layout); 
+0

你能具體談談你的問題?你在做什麼似乎是正確的(即在設置新的佈局之前刪除舊的佈局)。 – Job 2010-06-07 14:38:46

+0

當然!我執行以下操作: delete general_layout; general_layout = new QHBoxLayout; general_layout-> addLayout(some_layout); myQWidget-> setLayout(general_layout); – Narek 2010-06-07 14:57:56

回答

11

的問題是,刪除佈局時的佈局的部件不被破壞。這會導致myQWidget的所有子部件仍然存在,無需佈局。

解決方法很簡單:添加後

qDeleteAll(myQWidget->children()); 

delete general_layout; 
+0

似乎是這個問題。非常感謝!!!還有一個問題。我想要一個改變其結構的對話框(在這個問題的方面)。所以我通過創建佈局,刪除和創建一個新的。這是一個好方法嗎? – Narek 2010-06-07 15:32:27

+4

可能是如果你不需要第一個結構了。如果你這樣做,使用QStackedLayout(http://doc.trolltech.com/latest/qstackedlayout.html)要容易得多。 如果你想實現像嚮導一樣的東西,看看QWizard(http://doc.trolltech.com/latest/qwizard.html)。 – Job 2010-06-07 15:37:33

+0

qDeleteAll(myQWidget-> children());函數刪除所有的孩子,但孩子的孩子呢。我的意思是在myQWidget的子元素中,沒有佈局是general_layout的子佈局。當我調用general_layout的子佈局的方法時,我的應用程序爆炸了(所以我認爲指針被銷燬),但是當我檢查它是否等於0(m_childLayout_of_General_Layout == 0)時,則忽略語句。怎麼了?它被刪除或不是? – Narek 2010-06-07 18:08:25