【问题标题】:A widget contained in more than one cell in a QGridLayout is not centeredQGridLayout 中多个单元格中包含的小部件未居中
【发布时间】:2012-12-25 23:27:26
【问题描述】:

问题说明了一切。

我有一个 5 x 3 的网格。

看起来像这样

row 0:  buttonA--buttonA--buttonA   nothing   buttonB--buttonB--buttonB

row 1:  empty row

row 2:  buttonC  nothing  buttonD   nothing   buttonE  nothing  buttonF     

在整个列或行中没有任何内容的空间中, minimumRowHeight 和所有这些设置都可以工作。对吧?

嗯。按钮 A 和按钮 B(以及其他按钮)永远不会以它们共享的 3 个单元格为中心。绝不。我在布局参数上写了什么并不重要。

我删除了代码,因为它最终使用了垂直布局和内部两个水平布局。那些以这种方式居中。但我想更好地定位它们。

添加小部件时不起作用的是:

addWidget( 小部件, 0,0 , 2,0 , Qt::AlignHCenter );甚至 AlignCenter 都不起作用。

如何使其居中或向右对齐?

谢谢!

【问题讨论】:

  • 我发现一些帖子告诉我在 3 个单元格空间内添加一个可扩展的虚拟小部件。然后在其上插入一个布局和我们想要居中的小部件。它会起作用吗?是不是很复杂?
  • 附带说明,您显示的是 7 x 3 网格,而不是 5 x 3 的网格
  • 如果你想让 buttonA 被拉伸超过 3 列,你必须做 "addWidget( widget, 0, 0, 0, 3 );"试试看是否可行
  • 什么?.....但它从第 0 列到第 3 列 -> 4 列!
  • 您的 buttonA 在第 0、1、2 列中,然后在第 3 列中是“无”,然后 buttonB 在 4、5、6 中(至少在您提供的示例中)。无论如何,我只是想指出你必须设置最后一个数字,你的代码将它延伸到 2 行,而不是 3 列

标签: qt alignment qgridlayout


【解决方案1】:

QGridLayout::addWidget()的语法是这样的:

void QGridLayout::addWidget (QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0)

附上描述:

此版本将给定的小部件添加到单元格网格中,跨越多行/多列。单元格将从 fromRow 开始,fromColumn 跨越 rowSpan 行和 columnSpan 列

这表示你的线路

addWidget( widget, 0, 0, 2, 0, Qt::AlignHCenter ); 

fromRow = 0fromColumn = 0rowSpan = 2columnSpan = 0。这意味着它从第 0 行开始并跨越两行,即它将位于第 0 行和第 1 行(注意:总共两行,而不是另外两行)。它也从第 0 列开始,跨度为 0,我认为这意味着列跨度被忽略。

所以你真正想要的应该是:

addWidget( widget, 0, 0, 0, 3, Qt::AlignCenter );

您可能需要稍微尝试一下对齐方式。

【讨论】:

  • 太棒了!不错的工作。非常感谢您的好回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2019-05-22
  • 2011-07-20
  • 2012-06-12
相关资源
最近更新 更多