Qt QGridLayout中包含在多个单元格中的小部件未居中

Qt QGridLayout中包含在多个单元格中的小部件未居中,qt,alignment,qgridlayout,Qt,Alignment,Qgridlayout,问题就是这样 我有一个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 在整个列或行中没有任何内容的空间中,最小行高和所有这些设置都将起作用。对吧? 嗯。按钮A和按钮B(以及其他

问题就是这样

我有一个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     
在整个列或行中没有任何内容的空间中,最小行高和所有这些设置都将起作用。对吧?

嗯。按钮A和按钮B(以及其他)永远不会在它们共享的3个单元格上居中。从未。不管我在布局的参数上写什么

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

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

addWidget(widget,0,0,2,0,Qt::AlignHCenter);甚至连AlignCenter都不起作用

如何使其居中或向右对齐

谢谢

的语法如下所示:

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

随附说明:

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

这是你的台词

addWidget( widget, 0, 0, 2, 0, Qt::AlignHCenter ); 
具有
fromRow=0
fromColumn=0
rowSpan=2
ColumnSspan=0
。这意味着它从第0行开始,跨越两行,即,它将位于第0行和第1行(注意:总共两行,而不是另外两行)。它也从0列开始,跨度为0,我认为这意味着忽略了列跨度

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

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

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

我发现一些帖子告诉您添加一个虚拟小部件,可在3个单元格空间内扩展。然后在上面插入一个布局和我们想要居中的小部件。这样行吗?这不是很复杂吗?作为旁注,你展示了一个7 x 3的网格,而不是一个5 x 3的网格。如果你想让buttonA被拉伸到3列上,你必须做“addWidget(widget,0,0,0,3);”试试看这是否可行什么?。。。。。但是它从第0列到第3列->第4列!您的buttonA在第0、1、2列中,然后在第3列中为“nothing”,然后buttonB在第4、5、6列中(至少在您提供的示例中)。无论如何,我只是想指出,你必须设置最后一个数字,你的代码将其扩展到2行,而不是3列!干得好。非常感谢你的回答