如何在删除子布局时让QVBoxLayout收缩QDialog?

时间:2013-06-10 13:42:52

标签: c++ qt

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

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

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

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

3 个答案:

答案 0 :(得分:0)

请务必致电mainLayoutPtr->setSizeConstraint(QLayout::SetFixedSize)(这也会使用户无法调整对话框的大小,但在小工具隐藏/显示时可以正确调整大小)

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您正在寻找

QWidget::adjustSize()

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

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

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

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