更改 Qt 布局中的调整大小行为
Posted
技术标签:
【中文标题】更改 Qt 布局中的调整大小行为【英文标题】:Change resize behavior in Qt layouts 【发布时间】:2009-08-26 18:13:54 【问题描述】:我希望我的自定义小部件在调整对话框大小时获得额外空间。当我只有几个小部件时,这是可行的,但是在添加了更多这些相同小部件的列并将它们放入 QGridLayout 之后,额外的空间仅作为小部件之间的填充进入。
【问题讨论】:
【参考方案1】:我过去曾遇到过此问题,以下是我发现的一些问题:
首先确保您要扩展的所有小部件都将 sizePolicy 设置为“正在扩展”。
确保组成您的自定义小部件的小部件处于允许扩展的布局中。您可以通过将一个自定义小部件添加到窗口并查看它是否按预期展开来检查这一点。
确保表单上您不想扩展的任何小部件在您希望它们保持静态的维度上具有固定(最小=最大)大小。
有时网格布局会导致一些奇怪的间距问题,因为行会根据整行中最大的小部件调整大小,列的大小也是如此。对于某些布局,最好使用包含水平布局的垂直布局,反之亦然,以创建类似网格的效果。只有这样,每个子布局的间距才独立于其他行或列。
【讨论】:
【参考方案2】:以编程方式控制网格扩展
我发现您可以使用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。它将包含一个以逗号分隔的整数列表。
【讨论】:
【参考方案3】:另一个选项是在 QT Creator 内部,在您想要固定大小的部分的***布局小部件中指定“SetFixedSize”的 layoutSizeConstraint。您还必须从该小部件下方移除所有垫片。就我而言,我有一个包含 TreeWidget、Table 和一些颜色选择内容的对话框。我希望颜色选择控件水平保持相同大小,因此它们位于 VerticalLayout 中。如果您希望事物保持相同的高度,我想您也可以对 HorizontalLayout 做同样的事情。如果你真的需要在布局中使用间隔,你可以使用固定大小的空白标签。
【讨论】:
以上是关于更改 Qt 布局中的调整大小行为的主要内容,如果未能解决你的问题,请参考以下文章