我在Linux上使用Qt Creator 4.6 . 我的问题可以简化为基本上是文档中提供的示例的设置,但有一些小的更改:

https://doc.qt.io/qt-5/qml-qtquick-positioner.html

如果我运行下面的代码,它会绘制一些框,然后单击每个框应输出其索引 . 下面的代码正如我所写的那样正常工作 . 但是,如果我注释掉TEXT 1并取消注释TEXT 2,那么单击每个框的框输出-1 .

看起来我必须在MouseArea之前以某种方式使用定位器,否则它将无法正常工作(它可以在Text项中使用,也可以在Rectangle级别使用它) . 我猜它有一些东西与MouseArea没有完全解决,直到实际点击,也许如果编译器感觉没有使用定位器它不创建它?

这种行为是否可以预期,如果是这样的话,它可以在任在我的实际用例中,解决方法是仅使用定位器为父级别的未使用的属性或变量分配索引,因此它不是太大的交易,但我想理解它 .

Window {
    visible: true
    width: 640
    height: 480

    Grid {
        Repeater {
            model: 16

            Rectangle {
                id: rect
                width: 30; height: 30
                border.width: 1
                //color: Positioner.isFirstItem ? "yellow" : "lightsteelblue"
                color: "green"
                Text {
                    text: rect.Positioner.index  //TEXT 1
                    //text: "test" //TEXT 2
                }

                MouseArea {
                    id: dragArea
                    anchors.fill: parent
                    onPressed: {console.log(rect.Positioner.index)}

                }
            }
        }
    }
}