1

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

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

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

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

4

3 回答 3

0

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

于 2013-06-10T14:00:42.020 回答
0

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

QApplication::processEvents();
dialog->resize(dialog->sizeHint());
于 2013-06-10T14:11:04.473 回答
0

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

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

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

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

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

于 2013-06-10T14:17:30.473 回答