QLayout需要最小的空间

时间:2015-11-09 14:48:51

标签: qt5 qscrollarea 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);
}

这些添加的小部件之间存在大量浪费的空间: With wasted space between dynamic QWidegts

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

Compressed the space with dragging the border with the mouse

通过setMaximumheigth()限制每个widgetList_i小部件高度是一个不错的方法,但是我在开头和结尾都有空格: MaximumHeigth

仅添加ui->vertivalLayout->addStretch(1);会导致空白空间。那个布局的开头很好: enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

快速回答

在插入代码之前放入此行

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

*你也可以在QtDesigner中找到这个属性,确保你选择的是Layout而不是QDockWidget。

<强>解释

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

提问: QScrollArea为您提供小部件的滚动功能。 您可以将QLayout打包在QWidget中,然后打包在QScrollArea中。