本页内容

State QML Type

定义对象和属性的配置。更多...

Import Statement: import QtQuick

属性

详细说明

状态是一组相对于默认配置的批量更改。

所有项都具有一个默认状态,该状态定义了对象和属性值的默认配置。可以通过向states 属性添加State项来定义新状态,从而使项能够在不同的配置之间切换。例如,这些配置可用于应用不同的属性值集或执行不同的脚本。

以下示例展示了一个Rectangle 。在默认状态下,矩形显示为黑色。在“点击”状态下,PropertyChanges 对象将矩形的颜色更改为红色。 在MouseArea 内部单击会使矩形的状态在默认状态和“被点击”状态之间切换,从而使矩形的颜色在黑色和红色之间切换。

import QtQuick

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 Quick 状态、过渡以及 Qt Qml。

属性文档

changes : list<Change> [default read-only]

该属性保存了要应用于此状态的更改

默认情况下,这些更改将应用于默认状态。如果该状态继承自另一个状态,则这些更改将应用于被继承的状态。

extend : string

该属性保存了此状态所继承的状态。

当一个状态继承自另一个状态时,它将继承该状态的所有变更。

对于扩展状态所指定的变更,被扩展的状态将被视为基状态。

name : string

该属性存储状态的名称。

每个州在其所属项中应具有唯一的名称。

when : bool

当需要应用该状态时,此属性生效。

当您希望应用该状态时,应将此属性设置为一个求值结果为true 的表达式。例如,以下Rectangle 在按下MouseArea 时会进入和退出“hidden”状态:

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 ,则将应用第一个匹配的状态。例如,在以下代码片段中,当sharedCondition变为true 时,将始终选中state1 ,而不是state2 。

Item {
    states: [
        State { name: "state1"; when: sharedCondition },
        State { name: "state2"; when: sharedCondition }
    ]
    // ...
}

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.