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



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

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

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

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

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

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

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

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

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