Details
-
Bug
-
Resolution: Unresolved
-
P3: Somewhat important
-
None
-
6.6.2
-
None
Description
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()"