-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
6.6.2
-
None
According to documentation:
"The columns property is only used when flow is GridLayout.LeftToRight." and "The rows property is only used when flow is GridLayout.TopToBottom"
But that is not the case when Layout.row or Layout.column is used. If you have both columns and rows defined, the layout behavior is affected.
I believe the problem comes from this if condition
if (gridSize.height() >= 0 && row >= gridSize.height()) { qmlWarning(child) << QString::fromLatin1("Layout: row (%1) should be less than the number of rows (%2)").arg(info->row()).arg(rows()); } else { row = info->row(); } if (gridSize.width() >= 0 && info->column() >= gridSize.width()) { qmlWarning(child) << QString::fromLatin1("Layout: column (%1) should be less than the number of columns (%2)").arg(info->column()).arg(columns()); } else { column = info->column(); }
in function
QQuickGridLayout::insertLayoutItems
Example to reproduce the issue:
GridLayout {
id: grid
columns: 2
rows: 3
flow: GridLayout.TopToBottom
Rectangle {
id: rect1
color: "Red"
width: 52
height: 32
Layout.row: 2
Layout.column: 0
}
Rectangle {
id: rect2
color: "Crimson"
width: 76
height: 40
Layout.row: 2
Layout.column: 1
}
Rectangle {
id: rect3
color: "Tomato"
width: 76
height: 40
Layout.row: 2
Layout.column: 2
}
Rectangle {
id: rect4
color: "Salmon"
width: 64
height: 40
Layout.row: 1
Layout.column: 0
}
Rectangle {
id: rect5
color: "Green"
width: 76
height: 40
Layout.row: 1
Layout.column: 1
}
Rectangle {
id: rect6
color: "Olive"
width: 76
height: 24
Layout.row: 1
Layout.column: 2
}
Rectangle {
id: rect7
color: "Teal"
width: 76
height: 40
Layout.row: 0
Layout.column: 0
}
Rectangle {
id: rect8
color: "Lime"
width: 52
height: 40
Layout.row: 0
Layout.column: 1
}
Rectangle {
id: rect9
color: "Brown"
width: 60
height: 48
Layout.row: 0
Layout.column: 2
}
}
When you run this example you will get this visual output

And in the Application Output
![]()
As you can see the gridlayout columns was taken into consideration even though the flow is TopToBottom.
Use the same example but set "rows: 1" , you will get an assert
![]()
The fix should be easy. We need to add the flow to the check in the if condition and change "row >= gridSize.height()" to "info->row() >= gridSize.height()"