2

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

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

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

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

用鼠标拖动边框压缩空间

通过 setMaximumheigth() 限制每个 widgetList_i 小部件高度是一个不错的方法,但是我在开头和结尾浪费了空间: 最大高度

仅添加 aui->vertivalLayout->addStretch(1);会导致最后出现空白。该布局的开头很好: 在此处输入图像描述

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

编辑: - 添加一个 spaceritem 使情况变得更糟:空间项目并不能解决我的问题

4

1 回答 1

4

快速回答

在您的插入代码之前放置这一行

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

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

解释

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

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

于 2015-11-09T15:19:43.237 回答