状态是默认配置的一组批量更改。
所有项目都有一个默认状态,它定义了对象和属性值的默认配置。 可以通过将 State 项添加到 states 属性来定义新状态,以允许项在不同配置之间切换。 例如,这些配置可用于应用不同的属性值集或执行不同的脚本。
下面的示例显示一个 Rectangle。 在默认状态下,矩形是黑色的。 在“单击”状态下,PropertyChanges 对象将矩形的颜色更改为红色。 在 MouseArea 内单击会在默认状态和“单击”状态之间切换矩形的状态,从而在黑色和红色之间切换矩形的颜色。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQml 2.12
import QtQuick.Controls 2.5
Window {
id:root
width: 400
height: 300
visible: true
title: qsTr("Hello World")
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" }
}
]
}
}
PropertyChanges
用于定义状态中的属性值或绑定。 这使项目的属性值能够在状态之间更改时更改。
要创建 PropertyChanges 对象,请指定要修改其属性的目标项,并定义新的属性值或绑定。 例如:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQml 2.12
import QtQuick.Controls 2.5
Window {
id:root
width: 400
height: 300
visible: true
title: qsTr("Hello World")
Item {
id: container
width: 300; height: 300
Rectangle {
id: rect
width: 100; height: 100
color: "red"
MouseArea {
id: mouseArea
anchors.fill: parent
}
states: State {
name: "resized"; when: mouseArea.pressed
PropertyChanges { target: rect; color: "blue"; height: container.height }
}
}
}
}
按下鼠标时,矩形变为调整大小的状态。 在这种状态下,PropertyChanges 对象将矩形的颜色设置为蓝色,并将高度值设置为 container.height。
请注意,这会在调整大小的状态下自动将 rect.height 绑定到 container.height。 如果不应该建立属性绑定,并且高度应该设置为状态更改时的 container.height 值,则将显式属性设置为 true。
关于绑定:QML教程-属性绑定与非绑定_Qt君的博客-CSDN博客_qml 属性绑定
PropertyChanges 对象还可以覆盖对象的默认信号处理程序,以实现特定于新状态的信号处理程序: