2012-10-14 76 views
1

我沒有找到解決方案,我的問題與兩個QLayouts。我需要應用QHBoxLayout與可能expandind,當我將添加新的小部件,按鈕,...。 所以我有:一個QDialog和兩個佈局。現在我知道我無法隱藏佈局。 所以我只是托盤:Qt隱藏QLayout(切換兩種佈局)

layout()->removeItem(firstlayout); 
layout()->addLayout(secondLayout); 

但我這樣做的時候,我看到possition [0,0]在第一佈局中的所有項目。 所以下一步我嘗試:

for (all items in first layout) if (widget) widget->hide(); 

但這是隻使用了QWidget,我有很多的佈局不同的項目。

簡單的方法是使用小部件,因爲可以使用隱藏/顯示,但是當我添加新項目時我需要自動擴展窗口。

回答

1

只需重建佈局,不需要同時保持兩個佈局的存在。可能最清楚的是擁有兩個(或更多)方法,它們首先刪除當前佈局,然後創建新佈局,向其添加小部件,隱藏要隱藏的所有小部件並將其設置爲當前佈局。請注意,您甚至不需要爲佈局保留一個成員變量,因爲無論如何QWidget都有這個變量,併爲您提供setter和getter。或者,如果您在不同的佈局中有不同的小組件,並且實際上希望能夠「切換頁面」,那麼只需使用QStackedWidget。或者如果你有一個固定的部分(按鈕等),然後用「頁面」部分,然後將「頁面」放入QStackedWidget,並保留固定部分。

+0

確定QStakedWidget是好的,但如果我將添加到此小部件QVBoxLayout並進入此佈局許多按鈕。 QStakedWidget是否會根據擴展QVBoxLayout進行擴展(當按鈕有固定高度時)? – Lodhart

0

'addLayout(secondLayout/firstLayout)'將自動刪除其他佈局,您不必刪除它。如果你保持一個指向佈局的指針(之前有addWidget()),你可以稍後使用佈局和小部件。 :)

+0

但是,這僅用於swith佈局,它並不隱藏所有未使用的佈局中的小部件,是嗎? – Lodhart

+0

它的確如此。你試過了嗎? :)我最近用了很多qt。 。 :) – Al2O3