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

Cor*_*y D 4 c++ user-interface qt

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

Jas*_*n B 13

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

  1. 首先确保要扩展的所有小部件都将sizePolicy设置为"Expanding".

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

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

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


swo*_*ngu 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
Run Code Online (Sandbox Code Playgroud)

使用Qt Designer控制网格扩展

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