QML QML 状态

Posted Dkma像疯子一样战斗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML QML 状态相关的知识,希望对你有一定的参考价值。

       用户界面用来显示不同场景中的界面,或者是改变它们的外观来相应用户的交互。通常情况下,由一些列变化是并发进行的。Qt帮助中查看QML States关键字。状态属性states.

1 创建状态

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

 Rectangle{
        id:window
        width:240; height:150
        color:"red"

        MouseArea{
        anchors.fill: parent
        onClicked:window.state = "moved"
        }

        states:[
        State{
            name:"moved"
            PropertyChanges {
                target: window
                x:50;y:50;
            }}
        ]
    }

  上述例子中Rectangle默认在(0 0)位置,附加一个moved状态,使用PropertyChanges对象将矩形的位置更改为了(50 50)。单击就能改变状态。 State项目定义了在新状态中要进行的所有改变,可以指定改变的附加属性,或者为其他属相创建附加的PropertyChanges,也可以修改其他对象的属性,而不仅仅是拥有状态的对象。

 

2 默认状态

   使用States项目可以批量处理属相的变化。除此之外还可以直接恢复到项目默认状态。使用when来回到原来状态。

    Rectangle{
        id:window
        width:240; height:150
        color:"red"

        MouseArea{
            id:moouseArea
        anchors.fill: parent

        }

        states:[
        State{
            name:"moved";
            when:moouseArea.pressed
            PropertyChanges {
                target: window
                x:50;y:50;
            }}
        ]
    }
}

  原来使用onClicked()信号处理器,调用状态切换。现在使用when属性来实现,回到默认状态。也可以直接设置属性值。

    Rectangle{
        id:window
        width:240; height:150
        color:"red"

        MouseArea{
            id:moouseArea
        anchors.fill: parent
        onPressed: window.state = "moved";
        onReleased: window.state = "";

        }
        states:[
        State{
            name:"moved";
            PropertyChanges {
                target: window
                x:50;y:50;
            }}
        ]
    }
}

  使用when属性比使用信号处理器来分配状态更加简单,更符合声明式的语言,建议使用when属性的方法。

以上是关于QML QML 状态的主要内容,如果未能解决你的问题,请参考以下文章

将页面重置为初始状态 qml

如何在 QML 中进行基于状态的模型更改

如何声明多个 QML 属性而不单独处理每个属性?

QML QML 状态

转载 qml: MouseArea重叠问题;

QML FlipableFlickable和状态与动画 上篇