【问题标题】:Qt Margin/spacing between widgetsQt 小部件之间的边距/间距
【发布时间】:2015-03-17 06:47:33
【问题描述】:

我想管理我的小部件之间的空间,垂直和水平。

这是一张说明我想要的图片:

当我点击红点时,我想减少/扩展红线所在的空间(垂直)。

当我点击蓝点时,我想减少/扩展蓝线所在的空间(水平)。

我的架构是这样的:

具有布局的主 Widget,其中包含左/右箭头按钮和用于所有白色视图的 QWidget。

这个 QWidget 包含一个 QGridLayout。在这个 QGridLayout 中,我有“左”、“后”...小部件(屏幕截图中为白色)。

  • 带有布局的 QWidget
    • 左箭头
    • 右箭头
    • 带有 QGridLayout (GRIDLAYOUT) 的 QWidget
      • QWidget 内部有一个 VBoxLayout 和 2 个标签。 (查看)

我试图设置 VIEW->setContentsMargins();但白色矩形保持不变,只有该矩形内的间距发生变化(例如,在边框和“左”标签之间(屏幕上的 1 和 2))。

我也尝试设置 GRIDLAYOUT->setContentsMargins();但这次只有屏幕上数字 3 和 4 的间距发生了变化。

显然,水平调整大小也有相同的行为。 (屏幕截图上的蓝色标记。

间距不允许单独管理垂直和水平间距...

我希望你能理解我试图解释的内容:o

我该如何管理?

提前谢谢你,

【问题讨论】:

  • 尝试在每个单元格之间使用垫片。 (即在您添加的每个组件之间的网格布局中添加一个垂直/水平分隔符).. 我不确定这是否能解决您的问题.. 但绝对值得一试
  • 更改间距时应该扩大/缩小什么,固定大小是什么?
  • 在垂直方向上,应该扩大的是屏幕截图中红线所在的空间,而白色矩形应该缩小。

标签: c++ qt layout


【解决方案1】:

为了管理白色矩形之间的空间,您可以轻松使用

QGridLayout()::setHorizontalSpacing(int spacing);
QGridLayout()::setVerticalSpacing(int spacing);

这将设置白色矩形之间的空间,但不会设置白色矩形和上部小部件边框之间的空间。对于这些,您必须使用(继承自 QLayout):

QGridLayout()::setContentsMargins ( int left, int top, int right, int bottom )

【讨论】:

  • 太完美了:) 谢谢。我只是一些“闪烁”,当我调整大小时,当我减小大小时,小部件会很快重新增长/缩小。你有什么想法吗?
  • 在调整大小时听起来像是渲染片段。不知道如何避免这种情况,可能会在以后的时间范围内阻止重绘,但从未这样做过。您可以尝试在第一次调用(间距)时使用 blockSignals() 并在调用第二次(边距)时取消阻塞。否则你实际上会调用 2 次重绘。
  • 这没有帮助:'(