ListView
デリゲートが別のファイルからコンポーネントをロードするQMLがあります。代理アイテムをクリックすると、更新したいListView
。CurrentIndex
そしてhighlight
選んだアイテム。
の を明示的に設定するid
と機能しListView
ます。Component
ただし、他の s にもデリゲートを使用したいので、デリゲート内ListView
からアクセスする一般的な方法を見つけるのに苦労しています。ListView.currentIndex
Component
コードは次のとおりです。
main.qml
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
ApplicationWindow {
title: qsTr("Hello World")
width: 640
height: 480
visible: true
ListModel {
id: contactsModel
ListElement {
name: "Bill Smith"
}
ListElement {
name: "John Brown"
}
ListElement {
name: "Sam Wise"
}
}
ListView{
id: contactsView
anchors.left: parent.left
anchors.top: parent.top
width: parent.width
height: parent.height
orientation: Qt.Vertical
spacing: 10
model: contactsModel
delegate: Contact{}
}
}
Contact.qml (デリゲートが使用するコンポーネント)
import QtQuick 2.0
Component{
id: contact
Rectangle{
width: 200
height: 50
color: ListView.isCurrentItem ? "#003366" : "#585858"
border.color: "gray"
border.width: 1
MouseArea{
anchors.fill: parent
onClicked: {
ListView.currentIndex = index; // <---- does not work
// contactsView.currentIndex = index; // <---- Works
}
}
Text{
anchors.centerIn: parent
color: "white"
text: name
}
}
}
どんな助けでも本当に感謝しています!