当前位置: 首页 > ai >正文

QML动画--ParallelAnimation和SequentialAnimation

一、ParallelAnimation

ParallelAnimation 是 QML 中用于并行执行多个动画的容器动画类型,可以同时运行多个子动画。

基本用法

qml

import QtQuick 2.15Rectangle {id: rectwidth: 100; height: 100color: "red"x: 0; y: 0; opacity: 1.0ParallelAnimation {running: trueNumberAnimation { target: rect; property: "x"; to: 200; duration: 1000 }NumberAnimation { target: rect; property: "y"; to: 200; duration: 1500 }PropertyAnimation { target: rect; property: "opacity"; to: 0.5; duration: 800 }}
}

主要属性

属性类型描述默认值
animationslist<Animation>子动画列表空列表
runningbool是否运行false
loopsint循环次数1
alwaysRunToEndbool停止时是否完成false

方法

方法参数描述
start()-开始所有子动画
stop()-停止所有子动画
restart()-重新开始所有子动画
pause()-暂停所有子动画
resume()-恢复所有子动画
addAnimation(animation)Animation添加子动画
removeAnimation(animation)Animation移除子动画
clearAnimations()-清除所有子动画

信号

信号描述
started()所有子动画开始时触发
stopped()所有子动画停止时触发
finished()所有子动画完成时触发
paused()所有子动画暂停时触发
resumed()所有子动画恢复时触发

使用示例

1. 基本并行动画

qml

ParallelAnimation {id: parallelAnimNumberAnimation { property: "x"; to: 300; duration: 1000 }NumberAnimation { property: "y"; to: 300; duration: 1000 }RotationAnimation { target: rotation; to: 360; duration: 1000 }
}

2. 动态添加动画

qml

ParallelAnimation {id: dynamicAnim
}// 动态添加动画
function addScaleAnimation() {var anim = Qt.createQmlObject('import QtQuick 2.15; NumberAnimation { property: "scale"; to: 2.0; duration: 500 }', dynamicAnim);dynamicAnim.addAnimation(anim);
}

3. 组合动画序列

qml

SequentialAnimation {// 第一阶段:并行移动和旋转ParallelAnimation {NumberAnimation { property: "x"; to: 200 }RotationAnimation { target: rotation; to: 90 }}// 第二阶段:并行改变颜色和大小ParallelAnimation {ColorAnimation { property: "color"; to: "blue" }NumberAnimation { property: "width"; to: 150 }}
}

注意事项

  1. 所有子动画会同时开始执行

  2. 整体动画持续时间等于最长子动画的持续时间

  3. 可以通过 animations 属性或 addAnimation() 方法添加子动画

  4. 可以嵌套使用 SequentialAnimation 创建复杂动画序列

  5. 子动画的 running 属性会被 ParallelAnimation 控制

二、SequentialAnimation

SequentialAnimation 是 QML 中用于顺序执行多个动画的容器动画类型,可以按顺序依次运行多个子动画。

基本用法

qml

import QtQuick 2.15Rectangle {id: rectwidth: 100; height: 100color: "red"x: 0; y: 0SequentialAnimation {running: trueNumberAnimation { target: rect; property: "x"; to: 200; duration: 1000 }NumberAnimation { target: rect; property: "y"; to: 200; duration: 1000 }ColorAnimation { target: rect; property: "color"; to: "blue"; duration: 500 }}
}

主要属性

属性类型描述默认值
animationslist<Animation>子动画列表空列表
runningbool是否运行false
loopsint循环次数1
alwaysRunToEndbool停止时是否完成当前动画false
currentAnimationAnimation当前正在运行的子动画null

方法

方法参数描述
start()-开始动画序列
stop()-停止动画序列
restart()-重新开始动画序列
pause()-暂停当前动画
resume()-恢复暂停的动画
addAnimation(animation)Animation添加子动画
removeAnimation(animation)Animation移除子动画
clearAnimations()-清除所有子动画
jumpTo(index)int跳转到指定索引的动画

信号

信号描述
started()动画序列开始时触发
stopped()动画序列停止时触发
finished()动画序列完成时触发
paused()动画序列暂停时触发
resumed()动画序列恢复时触发
currentAnimationChanged()当前运行的子动画改变时触发

使用示例

1. 基本顺序动画

qml

SequentialAnimation {id: seqAnimNumberAnimation { property: "x"; to: 100; duration: 500 }NumberAnimation { property: "y"; to: 100; duration: 500 }PauseAnimation { duration: 200 } // 暂停200毫秒RotationAnimation { target: rotation; to: 360; duration: 1000 }
}

2. 动态控制动画序列

qml

SequentialAnimation {id: dynamicSeqAnim
}// 动态添加动画
function buildAnimation() {dynamicSeqAnim.clearAnimations();dynamicSeqAnim.addAnimation(createAnim("x", 200));dynamicSeqAnim.addAnimation(createAnim("y", 200));
}function createAnim(prop, toValue) {return Qt.createQmlObject(`import QtQuick 2.15; NumberAnimation { property: "${prop}"; to: ${toValue}; duration: 500 }`,dynamicSeqAnim);
}

3. 嵌套组合动画

qml

SequentialAnimation {// 第一阶段:并行移动和旋转ParallelAnimation {NumberAnimation { property: "x"; to: 200 }RotationAnimation { target: rotation; to: 90 }}// 第二阶段:顺序改变颜色和大小SequentialAnimation {ColorAnimation { property: "color"; to: "blue" }NumberAnimation { property: "width"; to: 150 }}
}

特殊用法

1. 使用 PauseAnimation 添加延迟

qml

SequentialAnimation {NumberAnimation { property: "opacity"; to: 0; duration: 300 }PauseAnimation { duration: 500 } // 暂停500毫秒NumberAnimation { property: "opacity"; to: 1; duration: 300 }
}

2. 循环动画序列

qml

SequentialAnimation {loops: Animation.Infinite // 无限循环NumberAnimation { property: "x"; to: 200; duration: 1000 }NumberAnimation { property: "x"; to: 0; duration: 1000 }
}

注意事项

  1. 子动画会按照添加顺序依次执行

  2. 整体动画持续时间等于所有子动画持续时间之和

  3. 可以通过 currentAnimation 属性获取当前运行的子动画

  4. 使用 jumpTo() 方法可以跳过某些动画

  5. 可以嵌套 ParallelAnimation 创建复杂的动画组合

http://www.xdnf.cn/news/397.html

相关文章:

  • 《AI大模型应知应会100篇》第27篇:模型温度参数调节:控制创造性与确定性
  • springboot--web开发请求参数接收注解
  • QML Label 组件
  • sqlilabs-Less11 POST注入
  • 【STM32单片机】#10 USART串口通信
  • Linux 进程间通信详解
  • 【Cheat Engine】官方教程步骤8:多级指针 超详解!
  • 玩转Docker | 使用Docker部署tududi任务管理工具
  • 面向对象设计中的类的分类:实体类、控制类和边界类
  • Serving入门
  • B端管理系统:企业运营的智慧大脑,精准指挥
  • STM32的三种启动方式
  • Rsync+sersync2实现目录实时同步
  • 《解锁图像“高清密码”:超分辨率重建之路》
  • llama-factory微调报错:
  • MySQL——触发器
  • 使用C语言的cJSON中给JSON字符串添加转义
  • 7.vtk坐标系
  • 爬取B站视频弹幕的简易教程(下)
  • c++_csp-j算法 (1)
  • Win 11 重装 Ubuntu 双系统方法
  • [Java微服务组件]注册中心P3-Nacos中的设计模式1-观察者模式
  • 机械设计【】一些常用的技术要求
  • 使用 TensorFlow 和 Keras 构建 U-Net
  • STC32G12K128单片机GPIO模式SPI操作NorFlash并实现FatFS文件系统
  • Linux编译艺术:源码编译安装指南
  • SICAR 标准 安全门锁操作箱 按钮和指示灯说明
  • Linux线程——锁
  • 四级英语题型分析
  • 全链路灰度实现