【问题标题】:Compacting QDialog when elements are removed删除元素时压缩 QDialog
【发布时间】:2017-10-12 01:30:11
【问题描述】:

我有这个QDialog 和一个嵌套的QGroupBox,可以在对话的构造函数中删除(通过各种QDialog 方法,如hide()setVisible()setHidden())。不幸的是,当我删除它时,对话框的大小保持不变。有趣的是,主要的QGroupBox(带有嵌套QGroupBox的那个)缩小了,但窗口的其余部分没有。因此,主要的QGroupBox 周围有很大的空间。

我试过了:

  • 在 ctor 中调用 QDialog::resize() 通过 QMetaObject::invokeMethod(),将高度减少 30(删除的 QGroupBox 的大小),但这无济于事。
  • 调用 QDialog::adjustSize()(也在 ctor 中并通过 QMetaObject::invokeMethod())但这只会增加两个维度(就像疯了一样大!)。
  • QDialog 的“垂直政策”从“首选”(无论这意味着什么)更改为“最低”,但这没有任何作用。

QDialog 具有网格布局。

编辑:我注意到在主要QGroupBox 的上方和下方有这些verticalSpacers。无论我设置他们的政策和大小提示都没有区别——当我打电话给adjustSize() 时,他们仍然使整个窗口变得非常大。删除它们会使adjustSize() 获得正确的高度,但宽度仍然太大。删除它们而不调用 adjustSize() 会导致主要的 QGroupBox 保持相同的大小,并且不会由于删除它的一些子项而缩小。

我在 Ubuntu 16.04 上运行 Qt 4.8。

【问题讨论】:

    标签: qt layout window-resize qdialog


    【解决方案1】:

    您可以在对话框布局上使用QLayout::setSizeConstraint 强制它根据其内容自动调整大小,使用QLayout::SetFixedSizeQLayout::SetMinAndMaxSize 作为参数(后者允许用户调整对话框大小)。

    使用SetMinAndMaxSize,您可能还需要更改主QGroupBox 布局上的该属性,或者至少将其垂直布局策略设置为MaximumFixed

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2016-01-04
      • 2017-11-24
      • 1970-01-01
      相关资源
      最近更新 更多