QML 动画控制、顺序动画与并行动画

目录

    • 引言
    • 相关阅读
    • 基础属性说明
    • 工程结构
    • 示例代码解析
      • 示例1:手动控制动画(ControlledAnimation.qml)
      • 示例2:顺序动画(SequentialAnimationDemo.qml)
      • 示例3:并行动画(ParallelAnimationDemo.qml)
    • 总结
    • 工程下载

引言

接上文:QML 属性动画、行为动画与预定义动画。本文继续通过QML示例,介绍两种动画(顺序动画SequentialAnimation和并行动画ParallelAnimation)如何使用,并附带完整的示例代码。

相关阅读

  • ParallelAnimation官方文档
  • SequentialAnimation官方文档

基础属性说明

属性类型说明
targetObject动画作用的目标对象
propertystring需要动画化的属性名称
durationint动画持续时间(毫秒)
easing.typeenumeration缓动曲线类型(如Easing.InOutQuad)
runningbool控制动画运行状态

工程结构

qml_animation/
├── CMakeLists.txt
├── Main.qml          # 主界面
├── ControlledAnimation.qml      # 手动控制动画
├── SequentialAnimationDemo.qml  # 顺序动画示例
├── ParallelAnimationDemo.qml    # 并行动画示例
├── images.qrc        # 资源文件
└── main.cpp          # 程序入口

示例代码解析

示例1:手动控制动画(ControlledAnimation.qml)

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 400AnimatedImage {id: controlImgsource: "qrc:/images/huaji.gif"x: 0y: 150width: 100height: 100}NumberAnimation {id: controlledAnimtarget: controlImgproperty: "x"from: 0to: 300duration: 1500}Row {anchors.bottom: parent.bottomspacing: 10Button {text: "开始"onClicked: controlledAnim.start()}Button {text: "暂停"onClicked: controlledAnim.pause()}Button {text: "恢复"onClicked: controlledAnim.resume()}Button {text: "停止"onClicked: controlledAnim.stop()}Button {text: "重启"onClicked: controlledAnim.restart()}}
}

代码说明

这段代码通过组合使用 QML 的各种元素和控件,实现了对一个表情包移动动画的控制功能,用户可以通过点击不同的按钮来控制表情包的移动动画的开始、暂停、恢复、停止和重启。

其中NumberAnimation用于控制表情包的水平移动。设置了动画的目标对象(target)为 controlImg(即前面定义的表情包动态图),要控制的属性(property)为 “x”(水平坐标)。动画的起始位置(from)为 0,结束位置(to)为 300 像素,动画持续时间(duration)为 1500 毫秒。

运行效果

请添加图片描述


示例2:顺序动画(SequentialAnimationDemo.qml)

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 400SequentialAnimation {id: seqAnimationrunning: falseNumberAnimation { target: rect1; property: "rotation"; from: 0; to: 315; duration: 500 }NumberAnimation { target: rect2; property: "rotation"; from: 0; to: 315; duration: 500 }NumberAnimation { target: rect3; property: "rotation"; from: 0; to: 315; duration: 500 }}Row {spacing: 20anchors.centerIn: parentRectangle {id: rect1width: 80height: 80color: "pink"}Rectangle {id: rect2width: 80height: 80color: "cyan"}Rectangle {id: rect3width: 80height: 80color: "lime"}}Button {text: "启动动画"anchors.bottom: parent.bottomonClicked: {seqAnimation.start()}}
}

代码说明

这段代码通过组合使用 QML 的各种元素和控件,实现了三个彩色矩形的旋转动画效果,并通过按钮来控制动画的启动。用户点击 “启动动画” 按钮后,三个矩形会按照预先定义的动画序列依次旋转。

SequentialAnimation用于定义一个动画序列,动画会按照添加的顺序依次执行。设置了动画序列的初始状态为不运行(running: false)。
定义了三个NumberAnimation元素,每个动画都控制一个矩形(rect1、rect2、rect3)的旋转属性(rotation),起始角度为 0,结束角度为 315 度,动画持续时间均为 500 毫秒。

运行效果

请添加图片描述


示例3:并行动画(ParallelAnimationDemo.qml)

import QtQuick
import QtQuick.ControlsRectangle {width: 400height: 400ParallelAnimation {id: palAnimationrunning: falseNumberAnimation { target: rect1; property: "rotation"; from: 0; to: 315; duration: 500 }NumberAnimation { target: rect2; property: "rotation"; from: 0; to: 315; duration: 500 }NumberAnimation { target: rect3; property: "rotation"; from: 0; to: 315; duration: 500 }}Row {spacing: 20anchors.centerIn: parentRectangle {id: rect1width: 80height: 80color: "pink"}Rectangle {id: rect2width: 80height: 80color: "cyan"}Rectangle {id: rect3width: 80height: 80color: "lime"}}Button {text: "启动动画"anchors.bottom: parent.bottomonClicked: {palAnimation.start()}}
}

代码说明

运行效果

请添加图片描述


总结

通过本文中的三个示例,进行如下总结:

  • 手动控制动画适合需要精确控制动画生命周期的场景
  • 顺序动画适用于需要分步执行的动画序列
  • 并行动画可提升多个动画元素的协同表现力

工程下载

Gitcode项目地址:GitCode -> QML 动画示例

在这里插入图片描述
在之前的项目上增加了3个示例,实现了一个主界面(main.qml),基于swipeview为容器,展示6个示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PowerShell 实现 conda 懒加载

问题 执行命令conda init powershell会在 profile.ps1中添加conda初始化的命令。 即使用户不需要用到conda,也会初始化conda环境,拖慢PowerShell的启动速度。 解决方案 本文展示了如何实现conda的懒加载,默认不加载conda环境,只…

R语言学习--Day03--数据清洗技巧

在一般情况下,我们都是在数据分析的需求前提下去选择使用R语言。而实际上,数据分析里,百分之八十的工作,都是在数据清洗。并不只是我们平时会提到的异常值处理或者是整合格式,更多会涉及到将各种各样的数据整合&#x…

谷歌地图代理 | 使用 HTML 和矢量模式 API 更轻松地创建 Web 地图

在过去的一年里,谷歌对 Maps JavaScript API 进行了两项重要更新,以便更轻松地采用我们最新、最好的地图:HTML 地图和矢量模式 API。今天谷歌地图亚太区最大代理商之一的 Cloud Ace云一 为大家介绍一下更新的具体内容。 联系我们 - Cloud Ac…

WL-G4048 Multi-Port PCIe 4.0 Switch

系列文章目录 文章目录 系列文章目录《WL-G4048 Multi-Port PCIe 4.0 Switch数据手册》总结一、芯片介绍二、芯片规格介绍(一)功能指标(二)管理调试和监控(三)参考时钟(四)系统复位 …

召回11:地理位置召回、作者召回、缓存召回

GeoHash 召回 属于地理位置召回,用户可能对附近发生的事情感兴趣。GeoHash 是一种对经纬度的编码,地图上每个单位矩形的 GeoHash 的前几位是相同的,GeoHash 编码截取前几位后,将相同编码发布的内容按时间顺序(先是时间…

高效批量合并Word文档的工具介绍

软件介绍 本文介绍一款专门用于批量合并Word文档的工具,名为批量合并word工具。 使用方法与特点 如果需要将多个Word文档合并到一个Word文档中,就可以使用这款工具。使用前,需把要合并的Word文档都放在名为“word”的文件夹下。 该软件没有…

机器学习入门之KNN算法和交叉验证与超参数搜索(三)

机器学习入门之KNN算法和交叉验证与超参数搜索(三) 文章目录 机器学习入门之KNN算法和交叉验证与超参数搜索(三)一、KNN算法-分类1. 样本距离判断明可夫斯基距离 2. KNN 算法原理3. KNN 的缺点4. KNN 的 API5. 使用 sklearn 实现 …

小刚说C语言刷题—1700请输出所有的2位数中,含有数字2的整数

1.题目描述 请输出所有的 2 位数中,含有数字 2 的整数有哪些,每行 1个,按照由小到大输出。 比如: 12、20、21、22、23… 都是含有数字 2的整数。 输入 无 输出 按题意要求由小到大输出符合条件的整数,每行 1 个。…

在MYSQL中导入cookbook.sql文件

参考资料: GitHub 项目:svetasmirnova/mysqlcookbook CSDN 博客:https://blog.csdn.net/u011868279/category_11645577.html 建库: mysql> use mysql Reading table information for completion of table and column names …

Scrapy框架下地图爬虫的进度监控与优化策略

1. 引言 在互联网数据采集领域,地图数据爬取是一项常见但具有挑战性的任务。由于地图数据通常具有复杂的结构(如POI点、路径信息、动态加载等),使用传统的爬虫技术可能会遇到效率低下、反爬策略限制、任务进度难以监控等问题。 …

【Win32 API】 lstrcmpA()

作用 比较两个字符字符串(比较区分大小写)。 lstrcmp 函数通过从第一个字符开始检查,若相等,则检查下一个,直到找到不相等或到达字符串的末尾。 函数 int lstrcmpA(LPCSTR lpString1, LPCSTR lpString2); 参数 lpStr…

代码随想录60期day38

2维背包 #include<bits/stdc.h> using namespace std;int main(){int n,bagweight;cin>>n>>bagweight;vector<int>weight(n,0);vector<int>value(n,0);for(int i 0 ; i <n;i){cin>>weight[i];}for(int j 0;j<n;j){cin>>val…

[模型部署] 1. 模型导出

&#x1f44b; 你好&#xff01;这里有实用干货与深度分享✨✨ 若有帮助&#xff0c;欢迎&#xff1a;​ &#x1f44d; 点赞 | ⭐ 收藏 | &#x1f4ac; 评论 | ➕ 关注 &#xff0c;解锁更多精彩&#xff01;​ &#x1f4c1; 收藏专栏即可第一时间获取最新推送&#x1f514;…

mac的Cli为什么输入python3才有用python --version显示无效,pyenv入门笔记,如何查看mac自带的标准库模块

根据你的终端输出&#xff0c;可以得出以下结论&#xff1a; 1. 你的 Mac 当前只有一个 Python 版本 系统默认的 Python 3 位于 /usr/bin/python3&#xff08;这是 macOS 自带的 Python&#xff09;通过 which python3 确认当前使用的就是系统自带的 Pythonbrew list python …

Java注解详解:从入门到实战应用篇

1. 引言 Java注解&#xff08;Annotation&#xff09;是JDK 5.0引入的一种元数据机制&#xff0c;用于为代码提供附加信息。它广泛应用于框架开发、代码生成、编译检查等领域。本文将从基础到实战&#xff0c;全面解析Java注解的核心概念和使用场景。 2. 注解基础概念 2.1 什…

前端方法的总结及记录

个人简介 &#x1f468;‍&#x1f4bb;‍个人主页&#xff1a; 魔术师 &#x1f4d6;学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全栈发展 &#x1f6b4;个人状态&#xff1a; 研发工程师&#xff0c;现效力于政务服务网事业 &#x1f1e8;&#x1f1f3;人生格言&…

组件导航 (HMRouter)+flutter项目搭建-混合开发+分栏效果

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 1.flutter创建项目并运行 flutter create fluter_hmrouter 进入ohos目录打开编辑器先自动签名 编译项目-生成签名包 flutter build hap --debug 运行项目 HMRouter搭建安装 1.安…

城市排水管网流量监测系统解决方案

一、方案背景 随着工业的不断发展和城市人口的急剧增加&#xff0c;工业废水和城市污水的排放量也大量增加。目前&#xff0c;我国已成为世界上污水排放量大、增加速度快的国家之一。然而&#xff0c;总体而言污水处理能力较低&#xff0c;有相当部分未经处理的污水直接或间接排…

TCP/IP 知识体系

TCP/IP 知识体系 一、TCP/IP 定义 全称&#xff1a;Transmission Control Protocol/Internet Protocol&#xff08;传输控制协议/网际协议&#xff09;核心概念&#xff1a; 跨网络实现信息传输的协议簇&#xff08;包含 TCP、IP、FTP、SMTP、UDP 等协议&#xff09;因 TCP 和…

5G行业专网部署费用详解:投资回报如何最大化?

随着数字化转型的加速&#xff0c;5G行业专网作为企业提升生产效率、保障业务安全和实现智能化管理的重要基础设施&#xff0c;正受到越来越多行业客户的关注。部署5G专网虽然前期投入较大&#xff0c;但通过合理规划和技术选择&#xff0c;能够实现投资回报的最大化。 在5G行…