qt - 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     

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

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

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

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

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

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

谢谢!

最佳答案

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

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



与描述:

This version adds the given widget to the cell grid, spanning multiple rows/columns. The cell will start at fromRow, fromColumn spanning rowSpan rows and columnSpan columns.



这意味着你的线路
addWidget( widget, 0, 0, 2, 0, Qt::AlignHCenter ); 

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

所以你真正想要的应该是:
addWidget( widget, 0, 0, 0, 3, Qt::AlignCenter );

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

关于qt - QGridLayout 中包含在多个单元格中的小部件未居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277184/

相关文章:

html - 如何在 CSS 上并排对齐标题上的两个元素?

javascript - 对齐图像和标尺之间的两个元素

qt - QGridLayout,3个 Pane ,无法正确扩展

qt5 - 带有 colspan 和 rowspan 的 QGridLayout

python - 如何在非 native QFileDialog 中重新填充系统的 "Recent places"?

c++ - 在 OpenGL 中渲染 QWidget

html - 将 div 标签彼此对齐并居中

c++ - 删除其中一个小部件后如何在特定位置设置 QGridLayout

C++ Qwt - 从 vector 中绘制数据

android - 在 Qt QMake 中选择 Android API 级别