2015-11-26 11 views
0

я использую ListView, как это:Как получить модель в onCurrentItemChanged с QtQuick ListView

ListView { 
     id: list 

     clip: true 
     spacing: 2 
     anchors.fill: parent 

     model: datas 
     delegate: listItem 

     onCurrentItemChanged: { 
      //I want get the part of the model which belong to currentItem 
     } 
    } 
    Component { 
     id: listItem 
     Rectangle { 
      height: 30 
      anchors.left: parent.left 
      anchors.right: parent.right 
      color: "green" 

      Label { 
       anchors.fill: parent 
       text: uuid 
       color: "white" 
      } 

      MouseArea{ 
       anchors.fill: parent; 
       onClicked: { 
        console.log("study clicked") 
        console.log(uuid) 
        studyList.currentIndex=index 
        //component.selected(uuid) 
       } 
      } 

     } 
} 


Я хочу, чтобы получить часть модели, которая принадлежит currentItem в onCurrentItemChanged.
Например:
model является

ListModel{ 
    ListElement{uuid:aaaa} 
    ListElement{uuid:bbbb} 
    ListElement{uuid:cccc} 
} 

Так должно быть 3 пункта.
Если я нажму второй, я могу получить ListElement, который uuid - bbbb.

Есть ли способ?

+1

Почему вы хотите, чтобы получить '' currentItem' внутри onCurrentItemChanged' обработчика? – sk2212

+0

решение - 'datas.get (currentIndex)' похоже, что вы можете получить currentItem. Я обновлю свое решение. – Mido

+0

@ sk2212 Я хочу передать элемент в объект C++. – behtgod

ответ

0

Вы можете сделать:

onCurrentIndexChanged: { 
        //I want get the part of the model which belong to currentItem 
        console.log(datas.get(currentIndex)) 
       } 

тогда код будет

Item{ 

    width: 800 
    height: 480 


    ListModel{ 
     id: datas 
     ListElement{uuid:"aaaa"} 
     ListElement{uuid:"bbbb"} 
     ListElement{uuid:"cccc"} 
    } 



    ListView { 
     id: list 

     clip: true 
     spacing: 2 
     anchors.fill: parent 

     model: datas 
     delegate: listItem 
       onCurrentIndexChanged: { 
        //I want get the part of the model which belong to currentItem 
        console.log(datas.get(currentIndex).uuid) 
       } 
    } 


    Component { 
     id: listItem 
     Rectangle { 
      height: 30 
      anchors.left: parent.left 
      anchors.right: parent.right 
      color: "green" 

      Label { 
       anchors.fill: parent 
       text: uuid 
       color: "white" 
      } 

      MouseArea{ 
       anchors.fill: parent; 
       onClicked: { 
        list.currentIndex=index 
       } 
      } 

     } 

    } 
} 

или вы можете попробовать этот подход, когда кнопка нажата испускать сигнал с параметрами, текущий элемент и индекс или только элемент. пример:

import QtQuick 2.5 
import QtQuick.Window 2.2 
import QtQuick.Controls 1.4 

Item{ 

    width: 800 
    height: 480 


    ListModel{ 
     id: datas 
     ListElement{uuid:"aaaa"} 
     ListElement{uuid:"bbbb"} 
     ListElement{uuid:"cccc"} 
    } 



    ListView { 
     id: list 

     clip: true 
     spacing: 2 
     anchors.fill: parent 

     model: datas 
     delegate: listItem 
     signal sgnElementClicked(var element, var index) 

     //  onCurrentIndexChanged: { 
     //   //I want get the part of the model which belong to currentItem 
     //   console.log(currentItem) 
     //  } 

     onSgnElementClicked: console.log(element.uuid, index) 
    } 


    Component { 
     id: listItem 
     Rectangle { 
      height: 30 
      anchors.left: parent.left 
      anchors.right: parent.right 
      color: "green" 

      Label { 
       anchors.fill: parent 
       text: uuid 
       color: "white" 
      } 

      MouseArea{ 
       anchors.fill: parent; 
       onClicked: { 
        // console.log("study clicked") 
        //console.log(uuid) 
        list.sgnElementClicked(datas.get(index), index) 
        /// studyList.currentIndex=index 
        //component.selected(uuid) 
       } 
      } 
     } 
    } 
}