【问题标题】:How to get QVBoxLayout to contract QDialog when removing child layouts?删除子布局时如何让 QVBoxLayout 收缩 QDialog?
【发布时间】:2013-06-10 13:42:51
【问题描述】:

我有一个 QDialog 和一个 QVBoxLayout 控制它的高度。

这个主 QVBoxLayout 由一个或多个 QVBoxLayout 子级组成,然后是一些其他小部件。当我添加额外的 QVBoxLayout 子项(和/或较低的小部件)时,对话框会扩展以适应它们 - 正如您所期望的那样,并且正如我所希望的那样。

但是,当我从父 QVBoxLayout 中删除 QVBoxLayout 子项时,对话框的大小不会调整为与被删除的 QVBoxLayout 大小相等的量 - 它只是保持相同的大小,并带有难看的大空白区域。

如何在 QVBoxLayout/QDialog 中实现正确的动态行为,以便在从 QVBoxLayout 中移除子组件时正确调整对话框的大小?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    确保您调用mainLayoutPtr->setSizeConstraint(QLayout::SetFixedSize)(这也会使对话框无法由用户调整大小,但它能够在小部件隐藏/显示时正确调整大小)

    【讨论】:

    • 不幸的是,我有时也需要用户调整对话框的大小。 (我需要尽快解决一些问题。)
    【解决方案2】:

    如果您不想让对话框无法调整大小,您可以在删除任何子项后手动调整其大小:

    QApplication::processEvents();
    dialog->resize(dialog->sizeHint());
    

    【讨论】:

      【解决方案3】:

      QWidget::adjustSize() 就是你要找的:

      调整小部件的大小以适合其内容。

      如果sizeHint()有效,则此函数使用sizeHint(),即尺寸提示的宽度和高度>= 0。否则,它将大小设置为覆盖所有子小部件的子矩形(所有子小部件矩形的并集) )。

      对于 Windows,屏幕大小也被考虑在内。如果 sizeHint() 小于 (200, 100) 并且尺寸策略正在扩展,则窗口将至少为 (200, 100)。窗口的最大尺寸是屏幕宽度和高度的 2/3。

      文档 - http://doc.qt.digia.com/4.7/qwidget.html#adjustSize

      【讨论】:

      • 这似乎不起作用。也许我错过了什么?我已经覆盖 sizeHint() 以返回无效的大小,并且在对话框的 QVBoxLayout 对象上调用 removeItem 之后,我在对话框上调用 adjustSize()。我所看到的只是布局中的剩余项目间隔开来填充删除项目时创建的“洞”,并且对话框保持删除项目之前的大小。
      • 我想问题是删除项目时 QVBoxLayout 不会缩小。有没有办法强制这样做?
      • 您是否尝试过adjustSize() 您的对话框,而该对话框中的小部件将属性setSizePolicy() 设置为QSizePolicy::Maximum
      猜你喜欢
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2011-08-18
      • 2016-09-30
      • 2014-02-07
      • 1970-01-01
      • 2020-11-08
      相关资源
      最近更新 更多