QLayout 至少需要 space

QLayout with minimum space required

我有一个 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);
}

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

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

通过 setMaximumheigth() 限制每个 widgetList_i 小部件的高度是一个不错的方法,但是我在开始和结束时浪费了 spaces:

仅添加 ui->vertivalLayout->addStretch(1); 会导致末尾为空 space。该布局的开头很好:

主要问题:是否有一个函数可以将添加的小部件的布局高度设置为最小值?
附带问题:如何向该小部件添加垂直滚动条?

编辑: - 添加 spaceritem 使情况变得更糟: 并没有解决我的问题

快答

在你的插入代码之前放这行

ui->verticalLayout->parentWidget()->setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);

*您也可以在 QtDesigner 中找到此属性,请确保您选择的是 Layout 而不是 QDockWidget。

说明

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

附带问题: QScrollArea 为您提供小部件的滚动功能。 您可以将 QLayout 包装在 QWidget 中,然后再包装在 QScrollArea.