如何在 QML 中访问 Repeater 子级的属性?

问题描述 投票:0回答:2

你能告诉我下面的代码有什么方法可以改变imgx元素属性吗?我必须使用 javascript 更改 imgx.x 值。或者还有其他办法吗?我搜索 qt 文档但没有帮助。谢谢。

Row {
    Repeater {
        id:mmm
        model : 10
        Rectangle{
            clip: true
            width: 54
            height: 80
            color:"transparent"
            Image {
                id:imgx
                //x:-160
                //x:-105
                //x:-50
                x:0
                source: "images/tarama_lights.png"
            }
        }
    }
}
qt qml repeater element qt-quick
2个回答
31
投票

您必须将一个属性添加到 Repeater 的直接子级(在您的情况下为矩形),并将其设置为内部子级(在您的情况下为图像)中的属性的目标。然后您可以使用

mmm.itemAt(<index of the element>).<property> = value

Repeater {
    id:mmm
    model : 10
    Rectangle{
        clip: true
        width: 54
        height: 80
        color:"transparent"
        property int imageX: 0 //adding property here

        Image {
            id:imgx
            x: parent.imageX //setting property as the target
            source: "images/tarama_lights.png"
        }
    }
}

然后您可以像这样更改属性:

onPropertyChange: {
    mmm.itemAt(index).imageX = newValue //the index defines which rectangle you change
}

8
投票

JuliusG 的答案是正确的,使用

itemAt
。但不需要将其设置为内部子项中的属性的目标(在您的情况下为图像)。 您可以 按原样使用代码 而不是

onPropertyChange: {  mmm.itemAt(index).imageX = newValue //the index defines which rectangle you change }

用这个:

onPropertyChange: {  mmm.itemAt(index).children[0].x = newValue //the index defines which rectangle you change }

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.