Qt动画 QAbstractAnimation

news2025/4/18 2:46:23

文章目录

  • 简介
  • QVariantAnimation 数值动画
    • QPropertyAnimation 属性动画
  • QAnimationGroup 一组动画
    • QParallelAnimationGroup 并行动画组
    • QSequentialAnimationGroup 串行动画组

简介

QAbstractAnimation 是所有 Qt 动画的基类。
该类定义了所有动画应该都会有的功能函数。
要想实现一个Qt自定义动画,需要继承此类。

一个动画的进度由currentLoopTime函数给出。
一个动画的进度以毫秒为单位。
动画从0开始,到duration()结束,在动画运行时自动更新进度值。
也可以通过setCurrentTime函数直接定位进度。

一个动画有三个状态,Running,Stopped,Paused.
可以通过start(),stop(),pause(),resume(),来改变状态.
start()时,动画会重置进度.
如何paused了,在resume()时就会继续进度.
动画Stopped后也可以resume(),就是重头再来.
QAbstractAnimation每次发生状态改变时才会发出stateChanged()信号.

通过loopCount 属性来设置动画的循环次数
动画的默认的loopCount是1
loopCount是-1时,意味着无限循环
当动画运行到最后一次循环最后一毫秒时才会自动到Stopped状态
Stopped状态时finished()信号将会发出

QAbstractAnimation提供了子类用于跟踪动画进度的纯虚函数:duration()updateCurrentTime()
duration()函数允许您报告动画的持续时间
当动画进度变化时,QAbstractAnimation会调用updateCurrentTime(),重写此函数可以跟踪进度。
请注意,既没有定义updateCurrentTime()调用之间的间隔,也没有定义对此函数的调用次数;不过,它通常每秒更新60次。

通过重新实现updateState(),您可以跟踪动画的状态变化,这对于不受时间驱动的动画特别有用。

Qt动画框架
在这里插入图片描述

QVariantAnimation 数值动画

QVariantAnimation是对QVariants类型的数值类型执行插值。
QVariants支持的类型如下

  • Int
  • UInt
  • Double
  • Float
  • QLine
  • QLineF
  • QPoint
  • QPointF
  • QSize
  • QSizeF
  • QRect
  • QRectF
  • QColor

可以通过setStartValuesetEndValue来设置动画的起点与终点.
当QVariantAnimation执行插值时会发出valueChanged()信号,当然updateCurrentTime()也是会被调用的.

从StartValue到EndValue的变化曲线由setEasingCurve函数与QEasingCurve决定.

例子

#include "VariantAnimationDialog.h"
#include <QVariantAnimation>

VariantAnimationDialog::VariantAnimationDialog(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	QVariantAnimation* animation = new QVariantAnimation(this);
	animation->setStartValue(QColor(255, 0, 0));
	animation->setEndValue(QColor(0, 255, 255));
	animation->setDuration(2 * 1000);
	animation->setLoopCount(-1);
	animation->setEasingCurve(QEasingCurve::OutInBounce);
	connect(animation, &QVariantAnimation::valueChanged, [this](const QVariant& variant) {
		QColor color = variant.value<QColor>();
		this->ui.label->setStyleSheet(QString("background-color: %1").arg(color.name()));
	});

	animation->start();

}

VariantAnimationDialog::~VariantAnimationDialog()
{
}

QPropertyAnimation 属性动画

继承自QVariantAnimation,可以对对象的属性做值变化.
例子

#include "PropertyAnimationDialog.h"
#include <QPropertyAnimation>
#include <QGraphicsDropShadowEffect>

PropertyAnimationDialog::PropertyAnimationDialog(QWidget *parent)
	: QDialog(parent)
{
	ui.setupUi(this);
	QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(this);
	effect->setColor(QColor(0xcc,0xcc,0xcc));
	effect->setOffset(-17,-17);
	effect->setBlurRadius(0.0);
	QPropertyAnimation* animation = new QPropertyAnimation(effect,"blurRadius");
	ui.pushButton->setGraphicsEffect(effect);
	animation->setStartValue(10.0);
	animation->setEndValue(0.0);
	animation->setDuration(2*1000);
	animation->setLoopCount(-1);
	animation->setEasingCurve(QEasingCurve::Linear);
	animation->start();
	
}

PropertyAnimationDialog::~PropertyAnimationDialog()
{
}

QAnimationGroup 一组动画

一组动画里面有多个动画
组动画可以分为并行与串行

QParallelAnimationGroup 并行动画组

并行动画就是字面意思,一组动画是同时运行的。
例子


  QPushButton *bonnie = new QPushButton("Bonnie");
  bonnie->show();

  QPushButton *clyde = new QPushButton("Clyde");
  clyde->show();

  QPropertyAnimation *anim1 = new QPropertyAnimation(bonnie, "geometry");
  // Set up anim1

  QPropertyAnimation *anim2 = new QPropertyAnimation(clyde, "geometry");
  // Set up anim2

  QParallelAnimationGroup *group = new QParallelAnimationGroup;
  group->addAnimation(anim1);
  group->addAnimation(anim2);

  group->start();

QSequentialAnimationGroup 串行动画组

串行动画就是字面意思,一组动画按顺序依次运行。
例子

 QPushButton button("Animated Button");
  button.show();

  QPropertyAnimation anim1(&button, "geometry");
  anim1.setDuration(3000);
  anim1.setStartValue(QRect(0, 0, 100, 30));
  anim1.setEndValue(QRect(500, 500, 100, 30));

  QPropertyAnimation anim2(&button, "geometry");
  anim2.setDuration(3000);
  anim2.setStartValue(QRect(500, 500, 100, 30));
  anim2.setEndValue(QRect(1000, 500, 100, 30));

  QSequentialAnimationGroup group;

  group.addAnimation(&anim1);
  group.addAnimation(&anim2);

  group.start();

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

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

相关文章

SpringMvc的请求-获得请求参数

客户端请求参数的格式是: namevalue&namevalue..… 服务器端要获得请求的参数&#xff0c;有时还需要进行数据的封装&#xff0c;SpringMVC可以接收如下类型的参数: 基本类型参数 POJO类型参数 数组类型参数 集合类型参数 获得基本类型参数 Controller中的业务方法…

flutter开发音乐APP(前提准备)

1、项目的一些环境&#xff1a; 2、接口文档&#xff1a; 酷狗音乐 NodeJS 版 API 3、接口数据结构化 Instantly parse JSON in any language | quicktype UI样式借鉴参考&#xff1a; Coffee-Expert/Apple-Music-New-UI: Apple Music Clone on Flutter, with redesigned UI…

使用docker搭建redis镜像时云服务器无法访问到国外的docker官网时如何解决

下载redis镜像 docker redis:版本号 此时截图中无法访问到国外的docker官网 解决方案&#xff1a; 通过更换镜像源来正常下载redis镜像 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": ["https://docker.1…

双引擎驱动:解密音视频体验的QoS技术底座与QoE感官革命

QoS 定义&#xff1a;QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;衡量音视频传输技术层面的性能表现&#xff0c;聚焦网络传输和系统处理能力&#xff0c;通过客观指标量化服务质量。核心指标 码率/带宽&#xff1a;数据传输速率上限&#xff0c;直接…

pom导包成功,但是就是无法使用相关类,同时报错:Library:Maven ‘xxx‘ has broken path

开发环境&#xff1a;Intellij 2023 一、问题记录 在maven工程的pom文件导入如下某一依赖(JGit)。没有显示导包的错误&#xff0c;同时在maven仓库里面找到对应的包是正常下载到相应jar的。 但是就是无法引入相关的类。打开Project Structure&#xff0c;在Dependencies中发现…

mysql的下载和安装2025.4.8

mysql下载和安装 MySQL的下载网址&#xff1a; https://www.mysql.com/downloads/ 点击进入Windows版本下载&#xff1a;我们可以选择需要的MySQL版本以及所需的操作系统&#xff0c;这里选择离线安装&#xff1a; 注意&#xff1a;MySQL 8.0 是带有 MySQL Installer 的最后一…

QML Loader:延迟加载与动态切换

目录 引言相关阅读工程结构LoaderDelay.qml - 延迟加载实现完整代码HeavyComponent.qml代码解析运行效果 LoaderSwitch.qml - 动态切换组件完整代码代码解析运行效果 Main.qml - 主界面实现完整代码主界面结构代码解析 总结下载链接 引言 QML的Loader组件提供了一种强大的机制…

Spark Core编程

一 Spark 运行架构 1 运行架构 定义 Spark 框架的核心是一个计算引擎&#xff0c;整体来说&#xff0c;它采用了标准 master-slave 的结构 如图所示 2 核心组件 Spark 框架有两个核心组件: 1)Driver 2)Spark 驱动器节点&#xff08;用于执行 Spark 任务中的 main 方法&…

无人机装调与测试

文章目录 前言一、无人机基本常识/预备知识&#xff08;一&#xff09;无人机飞行原理无人机硬件组成/各组件作用1.飞控2.GPS3.接收机4.电流计5.电调6.电机7.电池8.螺旋桨9.UBEC&#xff08;稳压模块&#xff09; &#xff08;二&#xff09;飞控硬件简介&#xff08;三&#x…

【图书管理系统】全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)

图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时&#xff0c;需要响应给前端的数据 records&#xff1a;第 pageNum 页要展示的图书有哪些&#xff08;存储到List集合中&#xff09;total&#xff1a;计算一共有多少本书&#xff08;用于告诉前…

正则表达式补充——python

简介 本章是对前面正则表达式的补充。 一、复杂的查找替换等任务 content 张三是脑卒中病 李四&#xff0c;是高血脂 苏齐&#xff0c;是肺结核病 六六&#xff0c;是血血血血import re p re.compile(r...病) for one in p.findall(content):print(one) 运行结果&#xf…

[ctfshow web入门] web7

信息收集 题目提示&#xff1a;版本控制很重要&#xff0c;但不要部署到生产环境更重要。 那么很有可能&#xff0c;版本控制相关的信息被部署到环境了&#xff0c;比如比如version.txt记录了一些相关配件的版本&#xff0c;git版本管理工具中的.git文件夹未删除 信息收集就是…

DeepSeek-V3 API:开启下一代AI应用开发的新篇章

引言 在人工智能技术日新月异的今天&#xff0c;大型语言模型(LLM)正以前所未有的速度改变着我们与技术互动的方式。DeepSeek-V3作为国内领先的大语言模型之一&#xff0c;其API的开放为开发者提供了强大的AI能力集成方案。 DeepSeek-V3 API的核心优势 1.强大的语言理解与生…

go语言应该如何学习

以下是学习Go语言的高效路径及关键技巧&#xff0c;结合多个优质来源整理而成&#xff0c;适合不同基础的学习者&#xff1a; 一、基础语法快速入门&#xff08;1-2周&#xff09; 1、环境搭建 下载安装Go SDK&#xff0c;配置GOPATH和GOROOT环境变量&#xff0c;推荐使用Go…

NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)

路径类dp是线性dp的⼀种&#xff0c;它是在⼀个nm的矩阵中设置⼀个⾏⾛规则&#xff0c;研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题 矩阵的最小路径和_牛客题霸_牛客网 状态表⽰&#xff1a; dp[i][j]表⽰&#xff1a;到达[i, j]位置处&#xff0c;最⼩…

React + TipTap 富文本编辑器 实现消息列表展示,类似Slack,Deepseek等对话框功能

经过几天折腾再折腾&#xff0c;弄出来了&#xff0c;弄出来了&#xff01;&#xff01;&#xff01; 消息展示 在位编辑功能。 两个tiptap实例1个用来展示 消息列表&#xff0c;一个用来在位编辑消息。 tiptap灵活富文本编辑器&#xff0c;拓展性太好了!!! !!! 关键点&#x…

博途 TIA Portal之1200做主站与汇川EASY的TCP通讯

前言,虽然已经做了几篇关于TCP通讯的文章,但是不同的PLC之间的配合可能不同,下面将演示这种差异。 关于汇川EASY做从站的配置请参见下方链接文章:汇川EASY系列之以太网通讯(套接字socket做从站)_汇川以太网tcp套接字fb块-CSDN博客 1、硬件准备: 1200PLC,汇川EASY320…

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)

为什么需要理解CSP与GMP&#xff1f; 当我们启动一个Go程序时&#xff0c;可能会创建成千上万个goroutine&#xff0c;它们是如何被调度到有限的CPU核心上的&#xff1f;为什么Go能够如此轻松地处理高并发场景&#xff1f;为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…

Linux服务器——Samba服务器

简介 Samba 是一个开源的跨平台文件共享服务​​&#xff0c;允许 Linux/Unix 系统与 Windows 系统实现文件和打印机的共享与互操作。其核心协议为 ​​SMB/CIFS​​&#xff08;Server Message Block / Common Internet File System&#xff09;&#xff0c;是 Windows 网络中…