2012-05-03 25 views
2

特にListModelの移動機能に関しては、ListModelとListViewに少し問題があります。私はちょうどそれをデバッグするためにいくつかの変更とSDKに含まれ、動的リストの例から、あなたのコードスニペットが表示されます: コード:QML ListViewとListModelのインデックス

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) 

         } 
        } 
       } 
.... 

ので、画像「コンテンツ/写真/矢印-up.png」をクリックしたときモデルの1つの項目が1つ上の位置に移動します。例では、「Apple」 - 「Banana」 - 「Cumqat」 - 「Durian」の4つの項目があり、これはconsol.logの結果です。その商品を最初の位置に移動させる「バナナ」をクリックします:

名前で移動する前に1:バナナ 名前が1でリストに移動する前に:Apple 名前の後に1:アップルモデルで

名の移動前に:1のリストに移動した後名前:アップル

は、これは私がアップルをクリックした場合何が起こるかである(現在は2位になっていること)第一の位置に移動します1:アップル 名1のリストに移動する前に:1で、リスト内の移動後のバナナ 名::1のモデルでは、移動後のApple 名アップル

だから、すべての最初のそれは明らかであることの最初のインデックスListViewの最初のインデックスが1の間、ListModelは0ですが、モデル内のアイテムは移動されていますが、リスト内のアイテムは移動していないことが明らかです。 これは私の問題です。「名前」はTextEditのテキストで、ListViewデリゲートにはTextEditが含まれており、ユーザーがその名前を編集できるとします。私はそのテキストを取りたい場合は、私は私がこれを行うことができることを知っている: コード:

for (var i = 0; i <= myListView.count; i++){ 
    myItem= myListView.contentItem.children[i] 
    myName = myListView.name 

しかし、ここで問題があるが、私のリストビューでのListModelの移動機能を使用してアイテムを移動する可能性もありますしかし、アイテムを移動して前のサイクルを使用して「名前」を取ると、何も変わらないように見えます(DynamicListの例とまったく同じです)。一方 、私は「名前」を取る場合は使用して:私はテキストエディットでテキストを変更し、私は「名前」を取るしようとすると、

myName= myListModel.get(i).name 

は、その後、何も思わない

を変更するには、

それで、TextEditでリストビューを取得し、itemsofを移動する可能性を持って、何か変更を記録できるのですか?

私はちょうどこの使い、あなたは間違ってそれをやっているGiammarco

答えて

6

、どうもありがとうございました、私は明らかにされている願っています:

import QtQuick 2.0; 

Rectangle { 
    width: 400; 
    height: 300; 

    ListView { 
     id: listTest; 
     clip: true; 
     currentIndex: -1; 
     model: ListModel { 
      id: modelTest; 

      ListElement { name: "Banana"; } 
      ListElement { name: "Apple"; } 
      ListElement { name: "Orange"; } 
      ListElement { name: "Pear"; } 
     } 
     delegate: Item { 
      id: item; 
      height: 60; 
      anchors { 
       left: parent.left; 
       right: parent.right; 
      } 

      property bool isCurrent : (model.index === listTest.currentIndex); 
      onIsCurrentChanged: { 
       if (isCurrent) { 
        input.forceActiveFocus(); 
       } 
       else { 
        input.focus = false; 
       } 
      } 

      Text { 
       id: label; 
       font.pixelSize: 14; 
       text: model.name; 
       visible: !item.isCurrent; 
       anchors { 
        left: parent.left; 
        right: btnUp.left; 
        margins: 20; 
        verticalCenter: parent.verticalCenter; 
       } 
      } 
      TextInput { 
       id: input; 
       text: model.name; 
       visible: item.isCurrent; 
       onTextChanged: { modelTest.setProperty (model.index, "name", text); } 
       anchors { 
        left: parent.left; 
        right: btnUp.left; 
        margins: 20; 
        verticalCenter: parent.verticalCenter; 
       } 

       Rectangle { 
        z: -1; 
        radius: 5; 
        antialiasing: true; 
        border { 
         width: 1; 
         color: "blue"; 
        } 
        anchors { 
         fill: parent; 
         margins: -5; 
        } 
       } 
      } 
      MouseArea { 
       id: clicker; 
       anchors.fill: parent; 
       visible: !item.isCurrent; 
       onClicked: { listTest.currentIndex = model.index; } 
      } 
      MouseArea { 
       id: btnUp; 
       width: height; 
       anchors { 
        top: parent.top; 
        right: parent.right; 
        bottom: parent.verticalCenter; 
       } 
       onClicked: { 
        if (model.index > 0) { 
         modelTest.move (model.index, model.index -1, 1); 
        } 
       } 

       Text { 
        text: "V"; 
        color: "gray"; 
        rotation: -180; 
        anchors.centerIn: parent; 
       } 
      } 
      MouseArea { 
       id: btnDown; 
       width: height; 
       anchors { 
        top: parent.verticalCenter; 
        right: parent.right; 
        bottom: parent.bottom; 
       } 
       onClicked: { 
        if (model.index < modelTest.count -1) { 
         modelTest.move (model.index, model.index +1, 1); 
        } 
       } 

       Text { 
        text: "V"; 
        color: "gray"; 
        anchors.centerIn: parent; 
       } 
      } 
      Rectangle { 
       height: 1; 
       color: "lightgray"; 
       anchors { 
        left: parent.left; 
        right: parent.right; 
        bottom: parent.bottom; 
       } 
      } 
     } 
     anchors.fill: parent; 
    } 
} 
+0

FWIW、ライン33 'falseを入力=;'与えますが'input'が左辺値ではないというエラーです。私はまだその行が何をしているのか、それが何であるべきかを理解していない。 –

+0

ありがとう@SteveFallows私はそれを修正しました。 – TheBootroo

関連する問題