更改Qt布局中的调整大小行为

问题描述 投票:4回答:3

我希望我的自定义小部件在调整对话框大小时获得额外的空间。当我只有一些小部件时,这是有效的,但是在添加了几个这些相同小部件的列并将它们放入QGridLayout之后,额外的空间仅仅作为小部件之间的填充。

c++ qt user-interface
3个回答
12
投票

我过去遇到过麻烦,以下是我发现的一些事情:

  1. 首先确保要扩展的所有小部件都将sizePolicy设置为“Expanding”。
  2. 确保构成自定义窗口小部件的窗口小部件采用允许扩展的布局。您可以通过将一个自定义小部件添加到窗口并看到它按预期扩展来检查这一点。
  3. 确保表单上您不想展开的任何窗口小部件在您希望它们保持静态的维度中具有固定的(最小=最大)大小。
  4. 有时,网格布局会导致一些奇怪的间距问题,因为行会根据整行中最大的窗口小部件进行调整,类似于列。对于某些布局,最好使用包含水平布局的垂直布局,或者反之亦然,以创建类似网格的效果。只有这样,每个子布局才独立于其他行或列间隔开。

9
投票

以编程方式控制网格扩展

我发现你可以使用QGridLayout::setColumnStretch()QGridLayout::setRowStretch()轻松控制哪些列/行扩展以及哪些列/行保持宽度固定。您需要为特定列提供权重(0表示无拉伸)。

例如,如果您希望第0列不占用任何房间而第1列占用窗口的其余部分,请执行以下操作:

QGridLayout* layout ;
// Set up the layout
layout->setColumnStretch( 0, 0 ) ; // Give column 0 no stretch ability
layout->setColumnStretch( 1, 1 ) ; // Give column 1 stretch ability of ratio 1

使用Qt Designer控制网格扩展

如果你正在使用Designer,你可以做我上面描述的。只需查看小部件属性layoutRowStretch和layoutColumnStretch即可。它将包含以逗号分隔的整数列表。


0
投票

另一个选项是在QT Creator中,在你想要固定大小的部分的顶级布局小部件中指定layoutSizeConstraint“SetFixedSize”。您还必须从该窗口小部件下方删除所有间隔符。在我的例子中,我有一个TreeWidget,Table和一些颜色选择的对话框。我希望颜色选择控件在水平方向上保持相同的大小,因此它们位于VerticalLayout中。我想如果你想让东西保持相同的高度,你也可以使用Horizo​​ntalLayout做同样的事情。如果你真的需要在布局中使用垫片,你可以使用固定尺寸的空白标签。

© www.soinside.com 2019 - 2024. All rights reserved.