I have a row with items which should stack when the window width gets too small for displaying all items in a row, as shown in the following sketch:
The Flow
component stacks the items but they are not centered but aligned on the left or right side:
Flow {
Item {}
Item {}
Item {}
Item {}
Item {}
}
Is there a built-in way in QML to make the flow centered?
No.
You can do the maths to check if the last "row" in the
Flow
is not full, and then add some spacer items to the left and right of the items in that row. You'd have to use some C++ though, probably; namelyQQuickItem::stackBefore()
andQQuickItem::stackAfter()
to reposition the spacer items within the list of children of theFlow
. The width of each spacer item would be half of the remaining space within that row. It's not pretty, but it should work.Well there is no built-in way but I found a workaround to do it.
The idea is simple, since
Flow
is already anItem
it hasanchors.leftMargin
andanchors.rightMargin
. So if we can calculate, how many elements is inside the row of theFlow
then we are able to calculate the left and right margins. So we can center in.Here it is a simple code,
I don't think there is any built-in way to do so. You have to make your own element.