Search code examples
qtqmlrepeaterqt-quick

How to access the properties of a Repeater's children in QML


I have to change imgx.x value, should I use JavaScript? Or is there another way?

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

Solution

  • You have to add a property to the direct child of the Repeater (Rectangle in your case) and set it as a target for the property in the internal child (Image in your case). You can then use 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"
            }
        }
    }
    

    You can then change the property like this:

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