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

时间:2009-08-26 18:13:54

标签: c++ qt user-interface

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

3 个答案:

答案 0 :(得分:12)

过去我遇到过这个问题,以下是我发现的一些事情:

  1. 首先确保您要展开的所有小部件都将sizePolicy设置为“Expanding”。

  2. 确保构成自定义窗口小部件的窗口小部件采用允许扩展的布局。您可以通过将一个自定义小部件添加到窗口并看到它按预期扩展来检查这一点。

  3. 确保表单上您不想展开的任何小部件在您希望它们保持静态的维度中具有固定的(最小=最大)大小。

  4. 有时网格布局会导致一些奇怪的间距问题,因为行会根据整行中最大的窗口小部件进行调整,对于列也是如此。对于某些布局,最好使用包含水平布局的垂直布局,或者反之亦然,以创建类似网格的效果。只有这样,每个子布局才会独立于其他行或列进行间隔。

答案 1 :(得分: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 即可。它将包含以逗号分隔的整数列表。

答案 2 :(得分:0)

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