QML 状态不起作用
Posted
技术标签:
【中文标题】QML 状态不起作用【英文标题】:QML states does not work 【发布时间】:2013-09-18 11:41:46 【问题描述】:好的,这里是 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
,它确实可以工作。
【问题讨论】:
【参考方案1】:我认为您的问题与Attached properties的定义直接相关。
附加属性,此处为ListView.isCurrentItem
,仅在您的ListView
的委托组件中可用。所以它不能在外面工作,在你的情况下,在State
的定义中
【讨论】:
以上是关于QML 状态不起作用的主要内容,如果未能解决你的问题,请参考以下文章