• QMLItem的state


    1、Item有两个状态属性

     states用来定义Item有多少种State状态,如长、宽,x、y,颜色,字体大小等等;

     state用来指定当前Item的状态是states种的哪一个。

    所以我们重点在于知道State是个啥

    2、关于State

    主要有4个属性:

    ①、changes:哪种变化,用的最多的是PropertyChanges,除此以外还有【不确定是不是】;

     ②、name:当前状态的名称;

     ③、when:可以切换当前状态的时机,如指定当MouseArea点击时切换到本状态;

     ④、extend:暂未了解

    3、关于PropertyChanges

     主要有3个属性:

     ①、target:此属性绑定目标,如绑定一个Rectangle【root】,绑定后就可以在PropertyChanges里设置目标root的属性如width为多少;

     ②、explicit:设置目标某属性时,是否与目标值绑定,如设置root的width为root2的width,当explicit为true时此时两个width是动态绑定的,root2的width变化了root的跟着变;为false时只是值相等;

     ③、restoreEntryValues:条件不匹配时是否恢复状态

    4、实例1:鼠标点击更改Text的颜色

    通过我们自己写js逻辑来实现:text默认为红色,点击后在红色和蓝色之间切换,代码:

    import QtQuick 2.6
    import QtQuick.Window 2.2
    
    Rectangle {
    
        Text {
            id:textTest
            font.pixelSize: 30
            states: [
                State {
                    name: "redStates"
                    PropertyChanges {
                        target: textTest
                        color:"red"
                    }
                },
                State {
                    name: "blueStates"
                    PropertyChanges {
                        target: textTest
                        color:"blue"
                    }
                }
            ]
            text: qsTr("Hello World")
            anchors.centerIn: parent
            state: "redStates"
        }
    
        MouseArea {
            anchors.fill: parent
            onClicked: {
                textTest.state = textTest.state=="blueStates"?"redStates":"blueStates"
            }
        }
    }

    效果:

     如上onClicked里的就是我们去写逻辑代码匹配状态,鼠标点击一次颜色切换一次。

    5、实例2:通过when来匹配状态

    这种状态只会在when条件成立时切换状态,当when条件不匹配时恢复状态,代码:

    import QtQuick 2.0
    Item {
        id: container
         300; height: 300
    
        Rectangle {
            id: rect
             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 }
            }
        }
    }

     默认是红色正方形,点击后蓝色矩形,松开后恢复红色正方形。

  • 相关阅读:
    vue响应式原理的实现
    手写 Promise
    模拟ATM机功能(C语言)
    打印空心菱形
    假设一对耗子每个月都可以生一对小耗子。小耗子生长3个月后,从第4个月开始也就能够生小耗子。问:假设所有的耗子都不死的话,那么20个月后一共有多少只耗子?
    判断一年中的第几天
    依次将10个数输入,要求打印出其中最大的数
    九九乘法表
    判断是否为闰年
    从键盘上接收一个字母,判断是否是大写字母,如果是则转换成小写字母输出 ,否则直接输出。
  • 原文地址:https://www.cnblogs.com/judes/p/15635996.html
Copyright © 2020-2023  润新知