包含在QGridLayout中的多个单元格中的窗口小部件不居中

时间:2013-01-11 11:24:44

标签: 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     

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

好。按钮A和按钮B(以及其余部分)永远不会集中在他们共享的3个单元格上。决不。我写的布局参数无关紧要。

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

使用以下方法添加小部件时不起作用:

addWidget(widget,0,0,2,0,Qt :: AlignHCenter); AlignCenter甚至都没有。

如何使其居中或对齐?

谢谢!

1 个答案:

答案 0 :(得分:12)

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 );

您可能需要稍微尝试对齐。