所需空间最小的 QLayout

Ral*_*kum 3 qscrollarea qt5 qlayout qvboxlayout

我有一个 QVBoxLayout,其中我在运行时动态添加其他 QWidget :

for(int i = 0; i < value; i++)
{
    QList<QWidget*> widgetList_i;
    //... widgetList_i.append(a lot of widgets)
    ui->verticalLayout->addWidget(widget_i);
}
Run Code Online (Sandbox Code Playgroud)

这些添加的小部件之间有很多浪费的空间:

动态 QWidegt 之间的空间被浪费

当我运行应用程序时,我可以用鼠标压缩高度。

用鼠标拖动边框压缩空间

使用限制每个widgetList_i小部件的高度setMaximumheigth()是一个很好的方法,但是我在开头和结尾浪费了空间:

最大高度

仅添加 aui->vertivalLayout->addStretch(1);会导致末尾出现空白。该布局的开头很好:

在此输入图像描述

添加 QSpacerItem 会使情况变得更糟:

空间项目

是否有一个函数可以将添加的小部件的布局高度设置为最小值?

Edw*_*uez 5

快速回答

在插入代码之前,添加以下行:

ui->verticalLayout->parentWidget()->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);
Run Code Online (Sandbox Code Playgroud)

另外,您可以在 Qt Designer 中找到此属性,请确保您选择的是布局而不是 QDockWidget。

解释

布局没有尺寸,只有小部件。布局位于其他小部件内部,因此您需要更改布局的父小部件的大小。 setSizePolicy 更改小部件的大小行为。该方法有 2 个参数:水平策略和垂直策略。您可以将水平策略保留为Preferred,这是默认值,并将垂直策略更改为Maximum,这意味着小部件的首选策略是最大尺寸。