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

dar*_*aze 5 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     
Run Code Online (Sandbox Code Playgroud)

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

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

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

什么不起作用是在添加小部件时使用:

addWidget(widget,0,0,2,0,Qt :: AlignHCenter); AlignCenter甚至没有工作.

如何使其居中或对齐?

谢谢!

Tim*_*yer 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 ); 
Run Code Online (Sandbox Code Playgroud)

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

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

addWidget( widget, 0, 0, 0, 3, Qt::AlignCenter );
Run Code Online (Sandbox Code Playgroud)

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