6.QML动画——状态与过渡
用户界面的各个部分可以用状态(state)来描述。状态定义了一组属性更改,并且可以由特定条件触发。这些状态可以附加过渡(transition),过渡定义发生状态更改时要运行的动画或动作。
一、状态(state、states和State)
state属性用于保存当前item的状态。states属性被指定为State对象的数组。任何State属性都要放在states数组中。
State元素定义了当前item的一系列状态。State的name属性表示状态的名称。name属性默认是一个空字符串。 可以通过将此name设置为空字符串来将item恢复为默认状态。除了name外,State元素还包含了一系列的PropertyChanges元素,PropertyChanges和State绑定,内部定义了在对应状态下的作用目标(target)和相应的属性值。 这样,可以在状态变化时,更改对应目标的属性值。
示例
import QtQuick 2.9Item {id: rootwidth: 640height: 480state: "stop"Rectangle {id:light1x:30y:30width: light1.x+parent.width/3height: light1.widthcolor: "yellow"border.color: "black"radius: light1.width/2}Rectangle {id:light2x:light1.width+2*light1.xy:light1.ywidth: light1.widthheight: light1.heightcolor: "yellow"border.color: "black"radius: light1.width/2}states: [State {name: "stop"; when:mouseare.pressedPropertyChanges {target: light1color:"black"}PropertyChanges {target: light2color:"red"}},State {name: "go"PropertyChanges {target: light1color:"green"}PropertyChanges {target: light2color:"black"}}]MouseArea {id:mouseareaanchors.fill: rootonClicked: {if (root.state=="go") {root.state="stop"}else {root.state="go"}}}
}
上述代码使用rectangle画圆(只需要将rectangle的width和height设为相同的值,然后radius属性设为height或者width的一半即可)。在states中定义了stop和go两种状态,然后状态变换时,light1和light2对应进行变化。此外,states中的State的name属性还可以和when连用,格式是name:"state val";when condition
二、过渡(transitions和Transition)
状态更改时,过渡此时可以运行状态变化是的动画或者动作。可以使用from和to属性定义从某个特定状态切换到其他状态时的过渡。from和to后面还可以接通配符*,表示任何状态。
transitions的作用和states是等同的,Transition和State是等同的
示例
将下面代码添加到上述代码的最后面
transitions: [Transition {from: "go"to: "stop"ColorAnimation {target:light1property:"color"duration: 1000}ColorAnimation {target:light2property:"color"duration: 1000}},Transition {from: "stop"to: "go"ColorAnimation {target:light1property:"color"duration: 1000}ColorAnimation {target:light2property:"color"duration: 1000}}]
上述两个Transition只是from和to不同,而且状态较少,可以使用通配符指定任何过渡状态
transitions: [Transition {from: "*"to: "*"ColorAnimation {target:light1property:"color"duration: 1000}ColorAnimation {target:light2property:"color"duration: 1000}}]
效果完全
参考
《qml book》
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出
6.QML动画——状态与过渡相关推荐
- 【游戏开发实战】使用Unity制作像天天酷跑一样的跑酷游戏——第二篇:使用Animator控制跑酷角色的动画状态切换
文章目录 一.前言 二.制作一段跳.二段跳动画 三.编辑动画控制器 四.运行效果 一.前言 嗨,大家好,我是新发,今天是大年初二,大家牛年快乐,牛气冲天. 我打算写一篇使用Unity制作像天天酷跑一样 ...
- QML动画分组(Grouped Animations)
通常使用的动画比一个属性的动画更加复杂.例如你想同时运行几个动画并把他们连接起来,或者在一个一个的运行,或者在两个动画之间执行一个脚本.动画分组提供了很好的帮助,作为命名建议可以叫做一组动画.有两种方 ...
- QML动画实战指南:打造华丽且高性能的用户界面动效
目录标题 引言 QML与Qt Quick简介 动画在现代UI设计中的重要性 QML Animation模块概述 QML动画基础概念 属性动画(PropertyAnimation) 父动画(Parent ...
- Roson的Qt之旅#49 QML动画之Behavior
1.继承关系 Behavior和Animation之间不存在继承关系,但是Behavior有一个成员变量是Animation类型的: [default] animation : Animation 2 ...
- framer x使用教程_如何使用Framer Motion将交互式动画和页面过渡添加到Next.js Web应用程序
framer x使用教程 The web is vast and it's full of static websites and apps. But just because those apps ...
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- Unity动画状态的获取和常用判断(逐步完善)
AnimatorStateInfo minfo = m_animator.GetCurrentAnimatorStateInfo(0); 其中参数0代表Base Layer GetCurrentAni ...
- android自定义过渡动画,11.自定义过渡动画
11.1 问题 应用程序需要自定义Activity切换或Fragment切换时产生的过渡动画. 11.2 解决方案 (API Level 5) 要修改Activity间的过渡动画,可以使用overri ...
- 项目实训(十六)FPS游戏之PUN角色位移同步,动画状态同步
文章目录 前言 一.PUN角色位移同步 二.PUN角色动画状态同步 前言 FPS游戏之PUN角色位移同步,动画状态同步 一.PUN角色位移同步 首先添加一个photon transform view的 ...
最新文章
- oracle数据库增加新字段
- tikhonov正则化 matlab_4 L1和l2正则化详解(花书7.1 参数范数惩罚)
- 得到按钮句柄后如何点集_RepPoint:可形变卷积生成的目标轮廓点集
- python 生成图片_python生成带有表格的图片
- 如何去除数据表中的重复数据
- 理解Python装饰器(Decorator)
- OpenFire 安装及配置
- 堆密度测定的意义_测定颗粒真密度的意义是什么
- Python练习——用循环求100以内7的倍数
- Scratch所有积木
- 基于数据挖掘的智能停车场运营数据分析系统
- Load balancer does not have available server for client问题
- python plot画简单的曲线图
- pixel2升级android11 开电信volte失败记录
- plc和单片机哪个更有前途?为什么本科生都不搞plc?
- Pandas dataframe 遇到ix报错问题
- 为何“爱辞职”成为了90后的又一标签?
- visibilitychange关于浏览器选项卡切换事件
- office972003_九年级化学《常见的碱》教学案例与教学反思microsoftofficeword972003.doc...
- SQL*Plus 学习笔记——常用编辑命令