QT - QML 状态(State)
详细说明
状态是一组基于默认配置的批量改变。
所有组件均具有默认状态,该状态定义对象和属性值的默认配置。可以通过向States属性添加State组件来定义新状态,以允许组件在不同配置之间切换。例如,这些配置可用于应用不同的属性值集或执行不同的脚本。
以下示例显示一个Rectangle。在默认状态下,矩形被涂成黑色。在“单击”状态下,PropertyChanges对象将矩形的颜色更改为红色。在MouseArea中单击可在默认状态和“单击”状态之间切换矩形的状态,从而在黑色和红色之间切换矩形颜色。
import QtQuick 2.0
Rectangle {
id: myRect
width: 100; height: 100
color: "black"
MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: myRect.state == 'clicked' ? myRect.state = "" : myRect.state = 'clicked';
}
states: [
State {
name: "clicked"
PropertyChanges {
target: myRect;
color: "red"
}
}
]
}
请注意,默认状态是使用空字符串(“”)引用的。
状态通常与转场动画一起使用,以在状态发生变化时提供动画。
注意:不允许从同一对象的另一个状态内设置对象的状态。
**另请参见“状态” 示例,“ Qt快速状态”,“ 过渡 ”和“ Qt QML”。
属性
- [default]changes : list<Change>
此属性保存适用于此状态的更改
默认情况下,这些更改将应用于默认状态。如果状态扩展了另一个状态,则将针对扩展状态应用更改。 - extend : string
此属性保留此状态扩展的状态。
当一个状态扩展到另一个状态时,它将继承该状态的所有更改。
关于扩展状态所指定的更改,被扩展的状态被视为基本状态。 - name : string
此属性保存状态的名称。
每个状态在其项目内应具有唯一的名称。 - when : bool
该属性在应用状态成立时生效。
应该将其设置为一个表达式,您希望何时应用状态时使该表达式的计算结果为true
。例如,当按下MouseArea时,以下Rectangle更改为进入和退出“隐藏”状态:
Rectangle {
id: myRect width: 100; height: 100 color: "red"
MouseArea {
id: mouseArea;
anchors.fill: parent
}
states: State {
name: "hidden";
when: mouseArea.pressed
PropertyChanges {
target: myRect;
opacity: 0
}
}
}
如果组中的多个状态具有when同时求值的子句,true则将应用第一个匹配状态。例如,在以下代码段中,state1将始终选择该代码段,而不是state2在sharedCondition变为时true。
Item {
states: [
State {
name: "state1";
when: sharedCondition
},
State {
name: "state2";
when: sharedCondition
}
]
// ...
}