C++ 删除子布局时,如何使QVBoxLayout与QDialog签约?

C++ 删除子布局时,如何使QVBoxLayout与QDialog签约?,c++,qt,C++,Qt,我有一个QDialog,QVBoxLayout控制它的高度 此主QVBoxLayout由一个或多个QVBoxLayout子项组成,后面是一些其他小部件。当我添加额外的QVBoxLayout子项和/或更低的小部件时,对话框将展开以适应它们——正如您所期望的,也正如我所希望的 但是,当我从父QVBoxLayout中删除QVBoxLayout子项时,对话框的大小并没有缩小到与已删除的QVBoxLayout大小相等的大小-它只是保持相同的大小,并带有不美观的大空白区域 如何在QVBoxLayout/QD

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

此主QVBoxLayout由一个或多个QVBoxLayout子项组成,后面是一些其他小部件。当我添加额外的QVBoxLayout子项和/或更低的小部件时,对话框将展开以适应它们——正如您所期望的,也正如我所希望的

但是,当我从父QVBoxLayout中删除QVBoxLayout子项时,对话框的大小并没有缩小到与已删除的QVBoxLayout大小相等的大小-它只是保持相同的大小,并带有不美观的大空白区域


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

确保调用mainLayoutPtr->SetSizeConstraintTQLayout::SetFixedSize这也会使用户无法调整对话框的大小,但是,当小部件隐藏/显示时,它将能够正确调整大小。如果您不想使对话框无法调整大小,可以在删除任何子项后手动调整其大小:

QApplication::processEvents();
dialog->resize(dialog->sizeHint());
QWidget::adjustSize是您需要的:

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

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

对于windows,还将考虑屏幕大小。如果sizeHint小于200100并且size策略正在扩展,则窗口将至少为200100。窗口的最大大小为屏幕宽度和高度的2/3


文档-

不幸的是,我也需要用户有时调整对话框的大小。我需要尽快解决一些问题,使其变得明智。这似乎无法单独发挥作用。也许我错过了什么?我已重写sizeHint以返回无效的大小,在对对话框的QVBoxLayout对象调用removeItem后,我正在对对话框调用adjustSize。我所看到的只是布局中剩余的项目,它们被隔开以填充删除项目时创建的“孔”,对话框保持删除项目前的大小。我猜问题是删除项目时QVBoxLayout不会收缩。有没有强制这样做?当对话框中的小部件将属性setSizePolicy设置为QSizePolicy::Maximum时,您是否尝试调整对话框大小?