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

时间:2012-11-07 13:31:45

标签: qt qml repeater element qt-quick

你能告诉我下面的代码是否有任何改变imgx元素属性的方法。我必须使用javascript更改imgx.x值。或者还有其他方法吗?我搜索qt docs但没有帮助。感谢。

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"
            }
        }
    }
}

2 个答案:

答案 0 :(得分:20)

您必须向Repeater的直接子项添加属性(在您的情况下为Rectangle),并将其设置为内部子项中的属性的目标(在您的情况下为Image)。然后,您可以使用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
}

答案 1 :(得分:3)

JuliusG的回答是正确的,使用itemAt。但是不需要将其设置为内部子项中的属性的目标(在您的情况下为Image)。 您可以使用您的代码而不是

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 }

希望它有所帮助。