Qt隐藏QLayout(在两个布局之间切换)

时间:2012-10-14 07:43:16

标签: qt layout

我找不到两个QLayouts的问题解决方案。当我要添加新的小部件,按钮,....时,我需要带QHBoxLayout的应用程序和可能的expandind .... 所以我拥有:一个QDialog和两个布局。现在我知道我无法隐藏布局。 所以我只是托盘:

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

但是当我这样做时,我在第一个布局中看到了所有项目[0,0]。 所以下一步我试试:

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

但这仅适用于QWidget,我在布局中有许多不同的项目。

简单的方法是使用小部件,因为可以使用隐藏/显示,但是当我添加新项目时我需要自动扩展窗口。

2 个答案:

答案 0 :(得分:1)

只需重建布局,就不需要同时保留两个布局。可能最清楚的是有两个(或更多)方法,首先删除当前布局,然后创建新布局,向其添加小部件,隐藏所有隐藏的小部件,并将其设置为当前布局。请注意,您甚至不需要为布局保留成员变量,因为QWidget无论如何都有,并为您提供setter和getter。

或者,如果您在不同的布局中有不同的小部件,并且实际上希望能够“切换页面”,那么只需使用QStackedWidget即可。或者,如果你有一个固定的部分(按钮等),然后分开“页面”,然后将“页面”放入QStackedWidget,并保持固定的部分。

答案 1 :(得分:0)

'addLayout(secondLayout / firstLayout)'将自动删除其他布局,您不必将其删除。如果你保留一个指向布局的指针(之前有addWidget()),你可以稍后在其中使用布局和小部件。 :)