24

Can you tell me for below code that is there any way to change the imgx element properties. I have to change imgx.x value using javascript. Or is there any other way? I search qt docs but not helpfull. Thanks.

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"
            }
        }
    }
}
CoffeeDay
  • 203
  • 1
  • 11
serkan gezer
  • 429
  • 1
  • 5
  • 8

2 Answers2

30

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. Code:

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
}
Chris Krycho
  • 3,125
  • 1
  • 23
  • 35
JuliusG
  • 2,321
  • 21
  • 30
7

JuliusG's answer is right in using itemAt. But it is not required to set it as a target for the property in the internal child (Image in your case). You can have your code as it is and instead of

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

use this:

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

Hope it helps.

Jatin
  • 276
  • 6
  • 12