如何获得QVBoxLayout合同QDialog时,删除子布局

How to get QVBoxLayout to contract QDialog when removing child layouts?

本文关键字:删除 布局 QDialog 何获得 QVBoxLayout 合同      更新时间:2023-10-16

我有一个QDialog与QVBoxLayout控制其高度。

这个主QVBoxLayout由一个或多个QVBoxLayout子控件组成,后面跟着一些其他小部件。当我添加额外的QVBoxLayout子控件(和/或较低的小部件)时,对话框会扩展以容纳它们——正如您所期望的,也是我想要的。

然而,当我从父QVBoxLayout中删除QVBoxLayout的子元素时,对话框的大小并没有被调整到等于被删除的QVBoxLayout的大小——它只是保持相同的大小,只是有难看的大空白区域。

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

确保您调用了mainLayoutPtr->setSizeConstraint(QLayout::SetFixedSize)(这也将使对话框不能由用户调整大小,但当小部件隐藏/显示时,它将能够适当地调整大小)

如果你不想让对话框不可调整大小,你可以在任何子元素被删除后手动调整它的大小:

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

QWidget::adjustSize()是您正在寻找的:

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

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

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

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