ListModel と ListView、特に ListModel の移動機能に関して少し問題があります。SDK に含まれている DynamicList の例のコード スニペットを、デバッグ用にいくつか変更して示します。
Item {
property alias nameText: nameTextBox.text
id: delegateItem
width: listView.width; height: 55
clip: true
Row {
anchors.verticalCenter: parent.verticalCenter
spacing: 10
Column {
Image {
source: "content/pics/arrow-up.png"
MouseArea {
anchors.fill: parent;
onClicked: {
var voice
var nameInModel
var nameInView
voice = listView.contentItem.children[1]
nameInModel = fruitModel.get(1).name
nameInView = voice.nameText
console.log("name before move in model at 1: "+nameInModel)
console.log("name before move in list at 1: "+nameInView)
fruitModel.move(index, index-1, 1)
voice = listView.contentItem.children[1]
nameInView = voice.nameText
nameInModel = fruitModel.get(1).name
console.log("name after move in model at 1: "+nameInModel)
console.log("name after move in list at 1: "+nameInView)
}
}
}
....
したがって、画像「content/pics/arrow-up.png」をクリックすると、モデル内の 1 つの項目が 1 つ上に移動します。この例では、「Apple」-「Banana」の 4 つの項目が順番に並んでいます。 -「Cumqat」-「Durian」。これは、「Banana」の「up」をクリックしてその項目を最初の位置に移動した場合の consol.log の結果です。
モデル 1 に移動する前の名前: リスト 1 に移動する前のバナナ名: アップル 1 にモデルに移動する後の名前: アップル 1 に移動する後の名前: アップル
Apple (現在は 2 位) をクリックして 1 位に移動すると、次のようになります。
モデル 1 に移動する前の名前: リスト 1 に移動する前のアップル名: モデル 1 に移動する後のアップル名: 1 にモデルに移動する後のバナナ名: アップル
まず、ListModel の最初のインデックスが 0 で、ListView の最初のインデックスが 1 であることは明らかです。次に、モデル内のアイテムは移動されましたが、リスト内のアイテムは移動されていないことが明らかです。さて、これが私の問題です。「名前」がTextEditのテキストであるため、ListViewデリゲートにはTextEditが含まれており、ユーザーが編集できると想像してください。そのテキストを取りたい場合は、これを実行できることを知っています: コード:
for (var i = 0; i <= myListView.count; i++){
myItem= myListView.contentItem.children[i]
myName = myListView.name
しかし、ここに問題があります。私の ListView には、ListModel の move 関数を使用して項目を移動する可能性もありますが、項目を移動し、前のサイクルを使用して「名前」を取得しても、何も変わらないようです (まさにDynamicList の例)。一方、次を使用して「名前」を取得すると:
myName= myListModel.get(i).name
次に、TextEdit でテキストを変更して「名前」を取得しようとしても、何も変わらないようです。
では、TextEdit を使用して ListView を取得し、変更を記録できるアイテムを移動できるようにするには、どうすればよいでしょうか。
私は明確であったことを願っています, どうもありがとう, ジャンマルコ