Подтвердить что ты не робот

Как получить доступ к свойствам детей Repeater в QML?

Можете ли вы рассказать мне ниже, что есть способ изменить свойства элемента imgx. Мне нужно изменить значение imgx.x с помощью javascript. Или есть другой способ? Я ищу 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"
            }
        }
    }
}
4b9b3361

Ответ 1

Вы должны добавить свойство к прямому ребенку Repeater (Rectangle в вашем случае) и установить его как цель для свойства во внутреннем дочернем элементе (изображение в вашем случае). Затем вы можете использовать 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
}

Ответ 2

Ответ 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 }

Надеюсь, поможет.