0

ListView のイベント ハンドラーから ListView デリゲート内の Text.text 項目にアクセスするにはどうすればよいですか。以下のサンプル コード (構文エラーがある可能性があります)。

ListView {
    id: mainLView
    model: ListViewModel {}
    delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: ""
      }
    }
    onMovementEnded {
      //here is where I would like to access the text in Text, e.g
      theText.text = "New Value"
    }
}

イベントハンドラから theText にアクセスできないため、私が持っているコードは機能しません。テキスト値を設定するにはどうすればよいですか?

EDIT:完全を期すために:Javaコード(アプリのロード中)を介してListViewにアイテムを追加し、コード別名を介してイベント内のListViewの値にアクセスできます

mainLView.model.append({'name': "First Value","city":"London"});
var myValue = model.get(currentIndex).city // or name

しかし、デリゲート Text { text:""} 値に値を割り当てる方法がまだ見つかりません。

EDIT 2 7月10日 これは、私が達成しようとしていることのより完全なコード例です。

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: nameX
      }
    }
    Component.onCompleted: {
        for (var x=1; x < 99; x++) {
            var data = {'nameX': "Name: " + x, "numberX":x};
            mainModel.append(data);
        }
    }
    onMovementEnded {
        //here I want to set the value to numberX e.g (this does not work)
        theText.text = mainView.model.get(currentIndex).numberX
    } 
}
4

3 に答える 3

2

ListView には、現在のインデックスにあるアイテムにアクセスするために使用できるプロパティ currentItem があります。デリゲートから何かにアクセスするには、デリゲートの最上位アイテムにプロパティが必要です。これは、それらのみが外部に公開されるためです。このようなものが動作するはずです:

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      property alias text: theText.text
      Text {
         id: theText
         text: nameX
      }
    }

    onMovementEnded {
        mainLView.currentItem.text = "foo";
    } 
}
于 2013-07-10T18:26:45.940 に答える
0

リスト ビュー デリゲートの Text (テキスト要素) に文字列値を代入します。モデルの属性名を使用できます。

次のように。ここで、名前は Jason オブジェクト {'name': "First Value","city":"London"}) から取得されます。

 delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: name // or city
      }
    }

このリンク ( http://kunalmaemo.blogspot.kr/2011/03/creating-custom-listview-delegate-in.html ) を確認してください。

ところで、デリゲートからテキストを取得するには、モデルから取得する必要があります。デリゲートはリストビューで再利用可能な要素であり、その値は変化し続けるため、デリゲートから取得することはできません。

于 2013-07-10T00:22:42.700 に答える