首页 > 其他分享 >Qml-Transition的使用

Qml-Transition的使用

时间:2024-11-01 22:46:20浏览次数:3  
标签:动画 状态 Transition height state1 Qml 过渡 使用

Qml-Transition的使用

Transition的概述

  1. Transition:定义了当状态发生改变时应用的动画
  2. 属性animations : list:(Transition)过渡的动画
  3. 属性enabled : bool:状态发生变化时,是否使能此过渡(Transition)动画;
  4. 属性from : string:过渡的起始状态(State)名称,默认为"*"(任何状态)
  5. 属性to : string:过渡的结束状态(State)名称,默认为"*"(任何状态)
  6. 属性reversible : bool:当触发此变换的条件反转时是否应自动反转转换
  7. 属性running : bool:只读(read-only),当前状态是否发生
  8. 注意:默认情况下,任何状态的修改,都会触发过渡动画。可以通过设置动画的from和to,来限制 只从一个状态到另一个状态的特定应用
  9. 注意:如果定义了多个过渡动画,会并行运行过渡动画,如果想过渡动画串行运行需要使用SequentialAnimation
  10. 注意:如果状态绑定的属性和Behavior绑定的属性一致时,过渡动画会覆盖Behavior动画,即过渡动画生效,Behavior动画不生效
  11. 注意:revesible的生效和PropertyChange 中restoreEntryValues属性有关系,restoreEntryValues 为false,不会生效。在本demo中,如果过渡有多个动画,revesible 生效需要同时满足:多个动画是串行动画(SequentialAnimation)且 fromto 属性要设置至少其中一个
  12. 注意:如果有多个过渡可供选择,会有个匹配规则,如果指定了from 和 to ,匹配指定的from和to,然后匹配指定了单个的,最后匹配“*”;比如状态有state1,state2,state3; Transition有 Transition{ id:t1;from:“state1”; to:“state2”},Transition{id:t2;to:“state2”},Transition{id:t3;xxx}
    a. 当状态从state1~state2 变化,优先选 t1
    b.当状态从 state3~state2变化,优先选 t2
    c.当状态从 state1 ~state3变化,优先选t3

Transition的实例代码

import QtQuick

//Transition 定义了当状态发生改变时应用的动画。
//在过渡动画中,可以不用显示设置动画的from和to 值,默认会将from值设置为当前状态值,to 设置目标状态值
//注意:默认情况下,任何状态的修改,都会触发过渡动画。可以通过设置动画的from和to,来限制 只从一个状态到另一个状态的特定应用
//注意:如果定义了多个过渡动画,会并行运行过渡动画,如果想过渡动画串行运行需要使用SequentialAnimation
//注意:如果状态绑定的属性和Behavior绑定的属性一致时,过渡动画会覆盖Behavior动画,即过渡动画生效,Behavior动画不生效


//Transition: 过渡动画
  // animations : list<Animation> :过渡动画列表
  // enabled : bool
  // from : string: 起始状态(State)名称
  // to : string: 终止状态(State)名称
  // reversible : bool:当触发此变换的条件反转时是否应自动反转转换
  // running : bool

  //注意reversible:只有设置为串行动画,且 from或to 设置某个值,reversible = true 才会可逆的运行动画。
  //同时reversible的效果还受 PropertyChanges 中的 restoreEntryValues 影响,如果restoreEntryValues:false 也不会生效


Rectangle{
    anchors.fill: parent

    Row{
        id:idRow1
        spacing: 20

        //按下会修改高度为50,颜色为green,释放被还原,动画时并行的
        Rectangle {
            id:idRec1
            width: 100; height: 100
            color: "blue"

            states: [
                State {
                    name: "state1"
                    when: idMoArea.pressed;                 //当鼠标按下触发状态
                    PropertyChanges {
                        target: idRec1
                        restoreEntryValues: true            //true 状态离开会还原为默认值
                        height: 50
                        color:"green"
                    }
                }
            ]

            transitions: [
                Transition {
                    reversible: true
                    to:"state1"
                    //两个动画时并行的
                    SequentialAnimation{
                        NumberAnimation{
                            property: "height"
                            duration: 2000
                        }
                        ColorAnimation {
                            duration: 2000
                        }
                    }
                }
            ]

            MouseArea{
                id:idMoArea
                anchors.fill: parent
            }
        }


        Rectangle {
            id:idRec2
            width: 100; height: 100
            color: "blue"

            states: [
                State {
                    name: "state1"
                   // when: idMoArea2.pressed;                 //当鼠标按下触发状态
                    PropertyChanges {
                        target: idRec2
                        height: 50
                        color:"green"
                    }
                },
                State {
                    name: "state2"
                   // when: idMoArea2.pressed;                 //当鼠标按下触发状态
                    PropertyChanges {
                        target: idRec2
                        height: 80
                        color:"red"
                    }
                }
            ]

            transitions: [
                Transition {

                    to:"state1"                             //如果明确指定了to state1,只能匹配to "state1"
                    NumberAnimation{
                        property: "height"
                        duration: 2000
                    }
                    ColorAnimation {
                        duration: 2000
                    }
                },

                Transition {

                    //两个动画时并行的
                    NumberAnimation{
                        property: "height"
                        duration: 500
                    }
                    ColorAnimation {
                        duration: 500
                    }


                    onRunningChanged: {
                        if(running)
                            console.log("default transition")
                    }
                }
            ]

            MouseArea{
                id:idMoArea2
                anchors.fill: parent
                onClicked: {
                    parent.state = "state2"
                }
            }
        }


        Rectangle {
            id:idRec3
            width: 100; height: 100
            color: "blue"

            states: [
                State {
                    name: "state1"
                    when: idMoArea3.pressed;                 //当鼠标按下触发状态
                    PropertyChanges {
                        target: idRec3
                        restoreEntryValues: true            //true 状态离开会还原为默认值
                        height: 50
                        color:"green"
                    }
                }
            ]

            transitions: [
                Transition {
                    reversible: true
                    //两个动画时并行的
                    NumberAnimation{
                        property: "height"
                        duration: 2000
                    }
                    ColorAnimation {
                        duration: 2000
                    }

                }
            ]

            MouseArea{
                id:idMoArea3
                anchors.fill: parent
            }
        }
    }

}

Transition实例代码运行结果如下:

1.从左到右:第一个矩形鼠标按下后先高度变为50在由蓝色变为绿色,鼠标释放,可逆操作发生,先绿色变为蓝色再由高度50变为100;可以对比第一个和第三个,第三个矩形可逆顺序不对。第二个矩形验证任何状态发生变化时,会选择一个最适配的过渡去运行。

2.效果图如下:
在这里插入图片描述

标签:动画,状态,Transition,height,state1,Qml,过渡,使用
From: https://blog.csdn.net/u013125105/article/details/143412348

相关文章

  • Qml-ShaderEffect的使用
    Qml-ShaderEffect的使用ShaderEffect的概述ShaderEffect使用自定义的顶点和片段着色器用于渲染一个矩形。用于在qml场景中添加阴影、模糊、着色和页面卷曲等效果。Qt5和Qt6中ShaderEffect有一定区别,在Qt6中由于支持不同的渲染API,ShaderEffect是用统一的qsb文件来满足对......
  • VMAF视频质量评估使用方法
    VMAF(VideoMultimethodAssessmentFusion)是一种基于机器学习的视频质量评估方法,它通过分析视频序列的多个质量特征来预测观众的主观质量感受。VMAF得分范围从0到100,其中100表示最高质量。以下是VMAF的使用方法和相关信息:VMAF使用方法FFmpeg集成:VMAF已被集成到FFmpeg中,作为一个......
  • lock 锁的使用场景
    publicclassProductService:IProductService{privatereadonlyobject_locker=newobject();privatereadonlyIMemoryCache_memoryCache;publicProductService(IMemoryCachememoryCache){_memoryCache=memoryCache;......
  • 如何使用GitHub上传文件
    使用GitHub上传文件的方法:1.创建GitHub仓库;2.使用GitHubDesktop上传文件;3.使用命令行上传文件;4.检查GitHub仓库。在开始之前,您需要一个GitHub账号。如果还没有账号,您可以在GitHub官方网站上注册一个。1.创建GitHub仓库在开始之前,您需要一个GitHub账号。如果还没有账号,您可以......
  • 三周精通FastAPI:27 使用使用SQLModel操作SQL (关系型) 数据库
    官网文档:https://fastapi.tiangolo.com/zh/tutorial/sql-databases/SQL(关系型)数据库¶FastAPI不需要你使用SQL(关系型)数据库。但是您可以使用任何您想要的关系型数据库。这里我们将看到一个使用SQLModel的示例。SQLModel是在SQLAlchemy和Pydantic的基础上构建的。它......
  • 使用批处理,切换电源计划,切换自动休眠时间
    1、打开命令提示符:按Win+R,输入cmd,然后按Enter。2、列出电源计划的GUIDpowercfg/list获取输出结果取下:C:\Users\Administrator>powercfg/list现有电源使用方案(*Active)-----------------------------------电源方案GUID:381b4222-f694-41f0-****-ff5bb260df......
  • 使用 AutoTrain 进行图像分类
    使用AutoTrain进行图像分类https://huggingface.co/blog/autotrain-image-classification2022年9月28日发布GitHub上的更新尼玛·博斯卡里诺尼玛·博斯卡里诺所以,您已经听说了机器学习领域正在发生的所有酷事,并且想要加入其中。只有一个......
  • JWT在SpringBoot项目中的使用方法与优劣性
    JWT介绍JWT(JSONWebToken)是一种用于在网络应用环境中安全地传递信息的开放标准(RFC7519)。它是一种基于JSON的令牌格式,广泛用于身份验证和信息交换。JWT的结构JWT通常由三部分组成:头部(Header)、有效载荷(Payload)和签名(Signature)。这三部分通过.字符连接在一起,形成一......
  • C语言中的数组初始化和使用技巧
    在编程语言C中,数组初始化和有效使用是至关重要的。数组是一种存储固定大小顺序集合的变量,通常用于存储相同类型的元素。数组的初始化涉及为数组元素赋予初始值、辨识数组边界,以及选择合适的数组类型等。例如,初始化一个整型数组可以使用intarr[10]={0};这会创建一个有10个整......
  • PHP使用RabbitMQ
    文档官网:https://www.rabbitmq.com/tutorials/tutorial-one-phpRabbitMQ关系说明:交换机:一个交换机可以有多个路由(routeKey),一个路由(routeKey)可以绑定多个队列。在发布消息的时候指定交换机对应的路由(routeKey),即可对应到该路由(routeKey)对应的队列。队列:常驻内存监听进......