Qt布局:垂直默认大小约束,水平setFixedSize

时间:2015-03-16 13:21:42

标签: qt layout

我正在开发一个具有复杂的小部件和布局层次结构的应用程序,但简而言之,它有一个中央小部件,其中一个处方集作为上部小部件,一个QScrollArea作为一个小部件(通过一个{ {1}})。

QVBoxLayout表示QScrollArea的列表(确实是网格布局),它可以包含大量按钮(或不包含)。

我希望我的应用符合以下限制条件:

  • 两者(表单和列表)都占用了所有可用的水平空间,重新分配其内容以填充所有水平空间(QPushButton也没有内容边距。)
  • 两者都必须尽可能保存为垂直空间,以便制作" line"彼此接近。

我部分地解决了我在表单上使用SpaceItem的问题,它会垂直缩小它,但也会水平缩小,导致列表和表单两者都有不同的宽度,而不是看起来很好。

我怎样才能实现这一目标?我的意思是,如何指定像setSizeConstraint(QLayout::SetFixedSize)

这样的东西

2 个答案:

答案 0 :(得分:0)

在布局中添加一个spacer作为最后一项:

gridLayout->addItem(new QSpacerItem(10, 10, QSizePolicy::Expanding, QSizePolicy::Expanding), lastrow, 0);

答案 1 :(得分:0)

我认为这就是你想要的:

如果你知道你将拥有多少列(并且它没有改变),最后一列中的insertStretch()(虽然它可能会给你与使用间隔符相同的效果)。

int columnCount = gridLayout()->columnCount();
gridLayout->insertStretch( columnCount(), 1 ); // Default stretch for other

请注意,除非您明确更改其宽度,否则这会将按钮的大小调整为Qt认为它们的大小。