web-dev-qa-db-ja.com

QMLでリピーターの子のプロパティにアクセスするにはどうすればよいですか?

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"
            }
        }
    }
}
16
serkan gezer

リピーターの直接の子(この場合は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
}
21
JuliusG

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 }

それが役に立てば幸い。

4
Jatin