如何重新排序GridLayout(或其他QML项容器)中的项目?我有一个有一些行和列,并填充了子项 . 直到几分钟前,我希望我可以简单地对项目的 children
列表成员进行操作以对它们进行重新排序:我在UI中有一个 MouseArea
按钮,我希望它可以简单地调用(来自 onClicked:
)a
function reorder() {children.unshift(children.pop());}
布局项的方法(布局中最后一项的意图成为第一个),但是当触发时会生成错误消息:
TypeError: Property 'pop' of object [object Object] is not a function
无论如何我注意到文档说 children
是只读的 .
有这么简单的方法吗? (关于动态对象管理的documentation实际上并不包括创建和销毁子对象的内容 . )
2 回答
您可以使用row和column附加属性 .
在Mitch回答之后,我想出了这个:
有几点需要注意:
为此,您必须在已包含的项目上明确设置
Layout.row
和Layout.column
. 如果您依赖于GridLayout
的单元格分配,则附加属性保持为零 . 这有点令人惊讶,因为我最初阅读documentation暗示GridLayout实际上设置了这些本身,如果你没有 .您还需要在布局上明确设置
rows
和columns
(对于从左到右的布局,您只需设置列以进行布局包装,然后行属性保持为-1,无论子行数是多少项目已添加,上述代码将失败) .随着项目的混乱,它会发出一些控制台警告,例如
QGridLayoutEngine::addItem: Cell (1, 1) already taken
. 虽然似乎很难受 .显然,以上只是真正期待处理完全填充的单细胞物品网格 .