2012-10-14 77 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