C

使用状态

锚点更改

指定在状态中更改项的锚点的方式

属性更改

描述状态的新属性绑定或值

状态

定义对象和属性的配置

许多用户界面设计都是 状态驱动的;接口根据当前状态的不同而具有不同的配置。例如,交通信号灯将根据其状态配置其标志或灯光。在信号灯的 停止 状态下,红灯将点亮,而黄灯和绿灯将熄灭。在 警示 状态下,黄灯点亮,而其他灯光熄灭。

在 QML 中,状态 是在 状态 类型中定义的一组属性配置。不同的配置可以如下

  • 显示某些 UI 组件并隐藏其他组件
  • 向用户展示不同的可用操作
  • 启动、停止或暂停动画
  • 执行新状态所需的某些脚本
  • 更改特定项的属性值
  • 显示不同的视图或屏幕

所有 基对象如果有 state 属性,则为 .qml 文件的根元素。您可以通过向项的 states 属性添加新的 State 对象来指定其他状态。组件内的每个状态都有一个唯一的 name(空字符串为默认值)。要更改项的当前状态,请将 state 属性设置为状态的名称。

创建状态

要创建状态,请向项的 states 属性添加一个 State 对象,该属性包含该项的状态列表。

警告信号组件可能具有两种状态,即NORMAL(正常状态)和CRITICAL(关键状态)。假设在NORMAL状态下,信号的颜色应为绿色,警告标志为下落。同时,在CRITICAL状态下,颜色应为红色,标志为上升。我们可以使用State类型来建模状态,并使用PropertyChanges类型来配置颜色和标志。

Rectangle {
    id: signal
    width: 200; height: 200
    state: "NORMAL"
    Flag { id: flag }

    states: [
        State {
            name: "NORMAL"
            PropertyChanges { target: signal; color: "green"}
            PropertyChanges { target: flag; state: "FLAG_DOWN"}
        },
        State {
            name: "CRITICAL"
            PropertyChanges { target: signal; color: "red"}
            PropertyChanges { target: flag; state: "FLAG_UP"}
        }
    ]
}

PropertyChanges类型会改变对象属性的值。对象通过它们的id被引用。

此外,可以通过将适当的信号状态分配给state属性来更改状态。状态切换可以放在一个MouseArea类型中,每当信号收到鼠标点击时,就分配不同的状态。

Rectangle {
    id: signalswitch
    width: 75; height: 75
    color: "blue"

    MouseArea {
        anchors.fill: parent
        onClicked: {
            if (signal.state == "NORMAL")
                signal.state = "CRITICAL"
            else
                signal.state = "NORMAL"
        }
    }
}

State类型不仅可以对属性值进行修改。

默认状态

每个基于Item的组件都有一个state属性和一个默认状态。默认状态是空字符串(""),包含一个项的所有初始属性值。默认状态可以在状态更改之前管理属性值。将state属性设置为空字符串将加载默认状态。

注意:与Qt Quick不同,默认状态不是特殊的。当切换到命名状态时,它不会被更新为组件当前属性和绑定的快照。有关更多信息,请参见默认状态限制

when属性

为了方便起见,State类型具有一个when属性,可以将其绑定到表达式,以便在绑定的表达式求值为true时更改状态。当表达式求值为false时,when属性将状态恢复到默认状态

Rectangle {
    id: bell
    width: 75; height: 75
    color: "yellow"

    states: State {
                name: "RINGING"
                when: (signal.state == "CRITICAL")
                PropertyChanges {target: speaker; play: "RING!"}
            }
}

signal.stateCRITICAL时,bell组件将转换为RINGING状态。

动画状态更改

状态更改会引发值的变化。Transition类型允许在状态更改期间更平滑地变化。在转换中,可以定义动画和插值行为。《动画和转换》文章提供了更多关于创建状态动画的详细信息。

在特定的Qt许可证下可用。
了解更多。