QT 布局管理器在移动窗口之前隐藏小部件时不会恢复空间

Posted

技术标签:

【中文标题】QT 布局管理器在移动窗口之前隐藏小部件时不会恢复空间【英文标题】:QT layout manager does not recover space when hiding widget until window is moved 【发布时间】:2016-03-20 09:13:44 【问题描述】:

我正在使用 Qlabels 绘制一些图形和图像(通过 setpixmap)。

我的基本布局是:

QVBoxlayout 主布局通过 qdialog 的 setlayout。 QHboxlayout(QLabels 数组) Qlabel expandPlot(上述 QLabels 之一的可选扩展图) QLabel mainImage 主图显示

在 QDialogs 重新实现的按键事件处理程序中,我隐藏()/显示()扩展的情节。当我 hide() 扩展绘图时,布局管理器恢复了大约 1/2 的垂直使用量。然后当我拖动窗口时,布局管理器会恢复垂直空间的剩余部分(就好像没有项目存在一样)。

如何强制移动窗口的行为?我希望布局管理器完全恢复垂直空间。

我在 Windows 上使用 Qt 5.6,但想要跨平台解决方案。 谢谢你,迈克

【问题讨论】:

您是否在隐藏小部件上调用updateGeometry?显示问题的代码的缩减版本将改善这个问题。 否 - 在这种情况下,updateGeometry 似乎是无操作的。在父级上尝试adjustSize 您好 Strubbly,谢谢。效果很好。 【参考方案1】:

因为布局小部件非常昂贵,Qt 并不总是这样做。如果您更改封闭小部件的大小,您可能需要在它们上调用updateGeometry 以触发封闭布局管理器重新布局。但是如果你隐藏了这个小部件,updateGeometry 什么都不做。在这种情况下,您需要在父窗口小部件上调用 adjustSize,这将触发重新布局。

【讨论】:

以上是关于QT 布局管理器在移动窗口之前隐藏小部件时不会恢复空间的主要内容,如果未能解决你的问题,请参考以下文章

具有单独布局的嵌套 Qt 小部件

QT:标题栏隐藏图标和隐藏后移动窗口

父级恢复时 Qt::Tool 出现太快

Qt 中的样式表、隐藏的小部件和大小

移动 QMainWindow 不会影响子窗口小部件的绘制位置

QT gui 项目不会缩小到其父小部件的 ft