【问题标题】:Qt hide QLayout (switch between two layouts)Qt hide QLayout(在两种布局之间切换)
【发布时间】:2012-10-04 12:28:13
【问题描述】:

我没有找到两个QLayouts 的问题的解决方案。当我将添加新的小部件、按钮、... 所以我有:一个QDialog 和两个布局。现在我知道我无法隐藏布局。 所以我只是托盘:

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

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

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

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

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

【问题讨论】:

    标签: qt layout


    【解决方案1】:

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

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

    【讨论】:

    • Ok QTakedWidget 没问题,但如果我将添加到这个小部件 QVBoxLayout 并在这个布局中添加许多按钮。 QStkedWidget 是否会根据扩展 QVBoxLayout 进行扩展(当按钮设置了固定高度时)?
    【解决方案2】:

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

    【讨论】:

    • 但这仅适用于布局,它不会隐藏未使用的布局中的所有小部件,是吗?
    • 确实如此。你试过了吗? :) 我最近经常使用 qt。 . :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2018-10-26
    • 1970-01-01
    • 2012-03-12
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多