我希望我的自定义小部件在调整对话框大小时获得额外的空间。当我只有一些小部件时,这是有效的,但是在添加了几个这些相同小部件的列并将它们放入QGridLayout之后,额外的空间仅仅作为小部件之间的填充。
我过去遇到过麻烦,以下是我发现的一些事情:
以编程方式控制网格扩展
我发现你可以使用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即可。它将包含以逗号分隔的整数列表。
另一个选项是在QT Creator中,在你想要固定大小的部分的顶级布局小部件中指定layoutSizeConstraint“SetFixedSize”。您还必须从该窗口小部件下方删除所有间隔符。在我的例子中,我有一个TreeWidget,Table和一些颜色选择的对话框。我希望颜色选择控件在水平方向上保持相同的大小,因此它们位于VerticalLayout中。我想如果你想让东西保持相同的高度,你也可以使用HorizontalLayout做同样的事情。如果你真的需要在布局中使用垫片,你可以使用固定尺寸的空白标签。