2

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 を取得し、変更を記録できるアイテムを移動できるようにするには、どうすればよいでしょうか。

私は明確であったことを願っています, どうもありがとう, ジャンマルコ

4

1 に答える 1