QML 属性动画、行为动画与预定义动画

news2025/7/14 7:34:18

目录

    • 引言
    • 相关阅读
    • 本文使用的动画属性
    • 工程结构
    • 示例解析
      • 示例1:属性动画应用
      • 示例2:行为动画实现
      • 示例3:预定义动画
    • 总结
    • 工程下载

引言

QML动画系统为界面元素提供了流畅的过渡效果。本文通过三个示例,结合属性动画(PropertyAnimation)、行为动画(Behavior),展示如何使用QML动画实现动态效果。

相关阅读

  • PropertyAnimation官方文档
  • NumberAnimation官方文档
  • Behavior官方文档

本文使用的动画属性

属性适用对象说明
targetAnimation指定动画目标对象
propertiesPropertyAnimation指定要动画化的属性列表
durationAnimation动画持续时间(毫秒)
easing.typeAnimation动画缓动曲线类型
runningAnimation控制动画运行状态
onStoppedAnimation动画停止时触发的信号

工程结构

qml_animation/
├── PropertyAnimationDemo.qml  # 属性动画示例
├── BehaviorAnimation.qml      # 行为动画示例
├── PredefinedAnimation.qml    # 预定义动画示例
├── images/
│   ├── huaji.gif              # 滑稽表情动画资源
│   └── rotation.gif           # 旋转箭头资源
└── main.qml                   # 主入口文件

示例解析

示例1:属性动画应用

PropertyAnimationDemo.qml

import QtQuick
import QtQuick.Controls

Rectangle {
    id: root
    width: 400
    height: 400

    AnimatedImage {
        id: img
        source: "qrc:/images/huaji.gif"
        x: 0
        y: 150
        width: 100
        height: 100

        // 属性动画
        PropertyAnimation on x {
            id: propAnim
            to: 300
            duration: 500
            running: false

            onStopped: {
                to = to===300 ? 0 : 300
            }
        }
    }

    Button {
        text: "启动属性动画"
        anchors.bottom: parent.bottom
        onClicked: {
            if (propAnim.running) return;
            propAnim.start();
        }
    }
}

代码说明

  1. 通过PropertyAnimation on x声明x坐标属性动画
  2. 设置动画终点值to和持续时间duration
  3. 按钮点击触发动画启动,防止重复触发
  4. 动画停止时切换终点值实现往复运动

运行效果

请添加图片描述

  • 初始位置:图片位于左侧
  • 点击按钮后:图片在500ms内平滑移动到右侧
  • 再次点击:图片返回左侧位置,重新开始从左至右的运动

示例2:行为动画实现

BehaviorAnimation.qml

import QtQuick
import QtQuick.Controls

Rectangle {
    width: 400
    height: 400

    AnimatedImage {
        id: behaviorImg
        source: "qrc:/images/huaji.gif"
        x: 150
        y: 150
        width: 100
        height: 100

        // 默认行为动画
        Behavior on x {
            NumberAnimation {
                duration: 500
                easing.type: Easing.OutBounce
            }
        }
    }

    Row {
        anchors.bottom: parent.bottom
        spacing: 10
        Button {
            text: "左移50"
            onClicked: behaviorImg.x -= 50
        }

        Button {
            text: "右移50"
            anchors.bottom: parent.bottom
            onClicked: behaviorImg.x += 50
        }
    }
}

代码说明

  1. Behavior on x声明x坐标的默认动画行为
  2. NumberAnimation用于实现数值动画
  3. OutBounce缓动效果用于实现弹性动画
  4. 按钮直接修改x值,同时会触发Behavior中的NumberAnimation动画。

运行效果

请添加图片描述

  • 点击"左移"按钮:表情包向左侧移动50(带弹跳效果)
  • 点击"右移"按钮:表情包向右侧移动50(带弹跳效果)

示例3:预定义动画

PredefinedAnimation.qml

import QtQuick
import QtQuick.Controls

Rectangle {
    width: 400
    height: 400

    AnimatedImage {
        id: img
        source: "qrc:/images/rotation.gif"
        x: 150
        y: 150
        width: 150
        height: 148

        // 预定义动画
        NumberAnimation {
            id: predefAnim
            target: img
            properties: "rotation"
            to: 360
            duration: 500

            onStopped: {
                to = to===360 ? 0 : 360
            }
        }
    }

    Button {
        text: "启动预定义动画"
        anchors.bottom: parent.bottom
        onClicked: {
            if (predefAnim.running) return;
            predefAnim.start();
        }
    }
}

代码说明

  1. 独立定义的NumberAnimation动画对象
  2. 显式指定target和properties
  3. 设置旋转角度目标值360度,动画执行时间为500ms
  4. 动画停止时重置目标值实现循环旋转

运行效果

请添加图片描述

  • 点击按钮后:箭头图片开始顺时针旋转
  • 单次动画完成360度旋转耗时500ms
  • 连续点击可实现连续旋转效果

总结

通过三个动画示例,我们可以得出以下结论:

  • PropertyAnimation适合精确控制单个属性的动画过程、
  • Behavior机制可实现属性变化的自动动画过渡
  • 预定义动画对象便于复用复杂动画配置

工程下载

Gitcode仓库地址: GitCode -> QML Animation示例

在这里插入图片描述

(包含完整源码和资源文件)

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

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

相关文章

window nvidia-smi命令 Failed to initialize NVML: Unknown Error

如果驱动目录下的可以执行,那可能版本原因 "C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"复制"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe"替换 C:\Windows\System32\nvidia-smi.exe 或者 把C:\Windows\System3…

自学嵌入式 day19-数据结构 链表

二、线性表的链式存储 1.特点: (1)线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的,也可以不连续。可以被存储在任意内存未被占用的位置上。 (2)所以…

东芝第3代SiC MOSFET助于降低应用中电源损耗

功率器件是管理和降低各种电子设备电能功耗以及实现碳中和社会的重要元器件。由于与比硅材料相比,碳化硅具有更高的电压和更低的损耗,因此碳化硅(SiC)被广泛视为下一代功率器件的材料。虽然碳化硅功率器件目前主要用于列车逆变器&…

PD 分离推理的加速大招,百度智能云网络基础设施和通信组件的优化实践

为了适应 PD 分离式推理部署架构,百度智能云从物理网络层面的「4us 端到端低时延」HPN 集群建设,到网络流量层面的设备配置和管理,再到通信组件和算子层面的优化,显著提升了上层推理服务的整体性能。 百度智能云在大规模 PD 分离…

官方 Elasticsearch SQL NLPChina Elasticsearch SQL

官方的可以在kibana 控制台上进行查询: POST /_sql { “query”: “SELECT client_ip, status FROM logs-2024-05 WHERE status 500” } NLPChina Elasticsearch SQL就无法以在kibana 控制台上进行查询,但是可以使用postman接口进行查询:

5月16日复盘-目标检测开端

5月16日复盘 一、图像处理之目标检测 1. 目标检测认知 ​ Object Detection,是指在给定的图像或视频中检测出目标物体在图像中的位置和大小,并进行分类或识别等相关任务。 ​ 目标检测将目标的分割和识别合二为一。 ​ What、Where 2. 使用场景 目标检测用于…

mathematics-2024《Graph Convolutional Network for Image Restoration: A Survey》

推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统&#xf…

IDEA怎么汉化idea中文改回英文版

第一步:点击左上角的File,然后选择Setting 第二步:Setting页面选择 Appearance & Behavior,然后展开System Settings,然后选择 Language and Region,进行修改 我操作的是2024年的版本 File->Settings -> Ap…

车道线检测----CLRKDNet

今天的最后一篇 车道线检测系列结束 CLRKDNet:通过知识蒸馏加速车道检测 摘要:道路车道是智能车辆视觉感知系统的重要组成部分,在安全导航中发挥着关键作用。在车道检测任务中,平衡精度与实时性能至关重要,但现有方法…

从技术视角解构 Solana Meme 币生态

在高吞吐、高并发的 Solana 网络上,一类轻量化、高热度的代币形式正在爆发式增长——Meme Token(迷因代币)。尽管起源于社群文化,但其技术实现并非“玩笑”,而是一整套构建于 Solana Runtime 与 Token Extensions 之上…

智能接处警系统:以秒级联动响应重塑应急处置效能

​​随着我国能源、化工、航空等关键行业的快速发展,传统消防管理模式已难以满足高效应急响应的需求。国家能源局、应急管理部、民航总局均出台专项规定,对消防站建设提出更高要求,在此背景下,智能接处警系统正是应对这些挑战的核…

GpuGeek 网络加速:破解 AI 开发中的 “最后一公里” 瓶颈

摘要: 网络延迟在AI开发中常被忽视,却严重影响效率。GpuGeek通过技术创新,提供学术资源访问和跨国数据交互的加速服务,助力开发者突破瓶颈。 目录 一、引言:当算力不再稀缺,网络瓶颈如何破局? …

C# DataGridView 选中所有复选框

问题描述 在程序中尝试选中所有复选框,但出现错误。如果单击顶部的完整选中/释放复选框,同时选中包含复选框的列,则选定区域不会改变。该如何解决? 上面的图片是点击完整版本之后的。 下面是本文的测试代码,函数 dat…

AB Download Manager v1.5.8 开源免费下载工具

下载文件是我们日常工作和生活中经常进行的操作。面对动辄数十GB的4K影片、设计素材包或开发工具,传统浏览器的单线程下载如同"涓涓细流",非常影响我们的效率和体验。 那么,一款高效且易用的下载工具至关重要。今天就让我们解锁这…

深度剖析:Dify+Sanic+Vue+ECharts 搭建 Text2SQL 项目 sanic-web 的 Debug 实战

目录 项目背景介绍sanic-web Dify\_service handle\_think\_tag报错NoneType问题描述debug Dify调用不成功,一直转圈圈问题描述debug 前端markdown格式只显示前5页问题描述debug1. 修改代码2.重新构建1.1.3镜像3.更新sanic-web/docker/docker-compose.yaml4. 重新部…

学习51单片机02

吐血了,板子今天才到,下午才刚开始学的,生气了,害我笔记都断更了一天。。。。 紧接上文...... 如何将HEX程序烧写到程序? Tips:HEX 文件是一种常用于单片机等嵌入式系统的文件格式,它包含了程序的机器码…

麒麟服务器操作系统安装 MySQL 8 实战指南

往期好文连接:统信UOS/麒麟KYLINOS安装JDBC驱动包 Hello,大家好啊,今天给大家带来一篇麒麟服务器操作系统上安装 MySQL 8 的文章,欢迎大家分享点赞,点个在看和关注吧!MySQL 作为主流开源数据库之一&#x…

AWS EC2 微服务 金丝雀发布(Canary Release)方案

为什么需要实现金丝雀发布? 在当前项目的工程实践中, 已经有了充分的单元测试, 预发布环境测试, 但是还是会在线上环境出现非预期的情况, 导致线上事故, 因此, 为了提升服务质量, 需要线上能够有一个预验证的机制. 如何实现金丝雀发布? 使用AWS code deploy方案 AWS code…

支持蓝牙5.0和2.4G私有协议芯片-PHY6222

PHY6222QC-W04C 是一款适用于蓝牙低功耗(BLE)5.2 应用的片上系统(SoC)。它搭载 ARM Cortex™-M0 32 位处理器,配备 64KB SRAM、512K Flash、96KB ROM、256 bit efuse ,以及超低功耗、高性能的多模式射频模块…

图像锐化调整

一、背景介绍 之前找多尺度做对比度增强时候,发现了一些锐化相关算法,正好本来也要整理锐化,这里就直接顺手对之前做过的锐化大概整理了下,方便后续用的时候直接抓了。 这里整理的锐化主要是两块:一个是参考论文&#…