QtQuick / QML:将项目重新设置为 GridLayout 的最后一个单元格不起作用

QtQuick / QML: Reparenting an item to the last cell of a GridLayout does not work

在我的应用程序中,我想手动将元素放置在 GridLayout 中,并通过拖放在单元格之间移动它们,就像棋盘一样。为此,我手动将要放置的元素的父元素设置为单元格索引。我在另一个 post 中找到了这种方法,我非常喜欢它。 为了解释我的问题,我整理了一个最小的工作示例。

import QtQuick
import QtQuick.Window
import QtQuick.Layouts 1.12

Window {
    width: 640
    height: 100
    visible: true

    GridLayout{
        columns: 10

        id: grid
        anchors.fill: parent
        Repeater{
            model: 10 * 2

            Rectangle{
                color: "lightblue"
                Layout.fillHeight: true
                Layout.fillWidth: true
            }
        }

    }

    Text{
        property int cellidx: 1
        parent: grid.children[cellidx]
        font.pointSize: 18
        font.bold: true
        text: cellidx
    }

    Text{
        property int cellidx: 18
        parent: grid.children[cellidx]
        font.pointSize: 18
        font.bold: true
        text: cellidx
    }

    Text{
        property int cellidx: 19
        parent: grid.children[cellidx]
        font.pointSize: 18
        font.bold: true
        text: cellidx
    }
}

原则上,这已经很好用了。除了 GridLayout 的最后一个单元格。正如您在屏幕截图中看到的那样,将 Text 元素放置到最后一个单元格不起作用

Screenshot

当尝试使用 parent: grid.children[cellidx]cellidx = 最后一个单元格的索引将元素放置到最后一个单元格时,它总是放置在布局的第一个单元格中或附近。

我也尝试了 Grid 布局,但在那里观察到相同的效果。也许有人对这个初学者问题有想法。不幸的是,Google 也帮不了我。非常感谢。

grid.children 可能包含 objects 除了您添加的矩形。也可能有内部创建的 children。当我测试你的代码时,我可以通过父级 grid.children[20] 而不是 grid.children[19].

将文本添加到最后一个矩形