在谷歌上搜How to access item in ListView delegate之后,看了好几篇文章,做了许些实验后,发现在这样的可以访问。以下贴出代码
import QtQuick 1.1
Rectangle {
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Rectangle {
width: 180; height: 200
ListModel {
id: id_model
ListElement {
name: "Bill Smith"
number: "555 3264"
index: 0
}
ListElement {
name: "John Brown"
number: "555 8426"
index: 1
}
ListElement {
name: "Sam Wise"
number: "555 0473"
index: 2
}
}
ListView {
id: view
anchors.fill: parent
model: id_model
delegate: Component {
Item {
property variant mymodel: model
width: 180; height: 40
scale: (view.currentIndex == index) ? 1.2 : 1
Column {
Text { text: '<b>Name:</b> ' + name }
Text { text: '<b>Number:</b> ' + number }
}
MouseArea {
anchors.fill: parent
onClicked: {
parent.ListView.view.currentIndex = index
}
}
}
}
onCurrentIndexChanged: {
console.log(view.currentIndex)
console.log(view.currentItem.mymodel.name)
}
highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
focus: true
}
}
}
主要就是,在delegate下的item里声明一个variant mymodel。初始化用ListView下面的model。
然后就可以在任何位置,访问delegate里面的数据了。
我一般是会访问currentItem下的数据。
onCurrentIndexChanged函数下面,只是一个demo。你也可以在ListView外新建一个MouseArea,来测试。
好了,到此为止。完了!