好的,所以这里是QML,我想要做的是,如果一个元素是当前项目,那个盒子会变大。
import QtQuick 2.0
Rectangle {
width: 300; height: 200; color: "white"
ListModel {
id: nameModel
ListElement { name: "Alice"; }
ListElement { name: "Bob"; }
ListElement { name: "Jane"; }
ListElement { name: "Harry"; }
ListElement { name: "Wendy"; }
}
Component {
id: nameDelegate
Item {
id: delegateItem
width: parent.width
我试试这个:
states: [
State {
name: "current"
when: ListView.isCurrentItem
PropertyChanges { target: delegateItem; height: 44 }
},
State {
name: "not"
when: !ListView.isCurrentItem
PropertyChanges { target: delegateItem; height: 26 }
}]
state: "not"
Text {
text: name
font.pixelSize: parent.height - 4
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
在这里,我做了类似的事情来验证它是否有效,它确实有效:
color: delegateItem.ListView.isCurrentItem ? "red" : "black"
}
}
}
ListView {
id: listView
anchors.fill: parent
model: nameModel
delegate: nameDelegate
focus: true
clip: true
header: Rectangle {
width: parent.width; height: 10;
color: "#8080ff"
}
footer: Rectangle {
width: parent.width; height: 10;
color: "#8080ff"
}
highlight: Rectangle {
width: parent.width; height: 10;
color: "lightgray"
}
}
}
现在我想知道出了什么问题,我知道ListView.isCurrentItem
会发生变化,因为
我看到选中时字母变为红色。
修改
jbh给我的答案很好。之后我将ListView.isCurrentItem
更改为delegateItem.ListView.isCurrentItem
并且有效。这是因为您无法从状态访问isCurrentItem
,但如果您转到delegateItem
则确实有效。
答案 0 :(得分:2)
我认为您的问题与Attached properties的定义直接相关。
附加媒体资源ListView.isCurrentItem
仅适用于ListView
的委托部分。因此它无法在外部工作,在您的情况下,在State