Qt学习-05-动画类

qt的动画类

Qt动画架构中的主要类如下图所示:

  • 动画框架由基类QAbstractAnimation和它的两个儿子QVariantAnimation和QAnimationGroup组成。QAbstractAnimation是所有动画类的祖宗。它包含了所有动画的基本属性。比如开始,停止和暂停一个动画的能力。它也可以接收时间改变通知。

  • 动画框架又进一步提供了QProertyAnimation类。它继承自QVariantAnimation并对某个Qt属性(它须是Qt的”元数据对象系统”的一部分。此类对属性执行一个宽松曲线插值。所以当你想去动画一个值时,你可以把它声明为一个属性,并且让你的类成为一个QObject。

  • 这给予我们极大的自由度来动画那些已存在的widget和其它QObject。 复杂的动画可以通过建立一个QAbstractAnimation的树来构建。这个树通过使用QAnimationGroups来创建,QAnimationGroups作为其它动画的容器。注意动画组也是从QAbstractAnimation派生的,所以动画组可以再包含其它动画组。

  • 动画框架可以单独使用,同时也被设计为状态机框架的一部分。状态机提供了一个特定的状态可以用来播放动画。在进入或退出某个状态时QState也可以设置属性们,并且这个特定的动画状态将在指定QPropertyAnimation时给予的值之间做插值运算。后面我们要进一步介绍此问题。

  • 在场景的背后,动画被一个全局定时器收集,这个定时器发送update到所有的正在播放的动画中。

应用示例1

//设置本地编码 #include <QTextCodec> //编码
    QTextCodec *codec = QTextCodec::codecForLocale();
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

    resize(500, 300);

     QPushButton *btn_start = new QPushButton(tr("开始"), this);
     btn_start->setGeometry(10,10,50,25);
     QPushButton *btn_stop = new QPushButton(tr("停止"), this);
     btn_stop->setGeometry(65,10,50,25);
     QLabel *label = new QLabel(tr("<font color='red'>hello world!</font>"), this);
     label->setGeometry(200, 130, 80, 20);
     label->setMinimumWidth(80);

     /*  声明动画类,并将控制对象 this (this一定是继承自QObject的窗口部件)  以及属性名 "geometry" 传入构造函数  */
     QPropertyAnimation* animation = new QPropertyAnimation(label, "geometry");

      /*  设置动画持续时长为 2 秒钟  */
     animation->setDuration(2000);

      /*  设置动画的起始状态 起始点 (50,30)  起始大小 (30,20)  */
     animation->setStartValue(QRect(50, 30, 30, 20));

     /*  设置动画的结束状态 结束点 (300,270)  结束大小 (30,20)  */
     animation->setEndValue(QRect(300, 270, 30, 20));

     /*  设置动画效果  */
     animation->setEasingCurve(QEasingCurve::CosineCurve);

     /*一直运行,直到stop*/
     animation->setLoopCount(-1);

     //绑定信号与槽
     connect(btn_start, SIGNAL(clicked(bool)), animation, SLOT(start()));
     connect(btn_stop, SIGNAL(clicked(bool)), animation, SLOT(stop()));

  • 动画效果如下:

在这里插入图片描述

应用示例2

  this->resize(800,533);

    //设置lab1的图片的样式
    QLabel *lab1 = new QLabel(this);
    lab1->setGeometry(0,0,800,533);
    lab1->setStyleSheet("QLabel{border-image:url(fish_image/seaworld1.png);}");

    //设置lab2的图片的样式
    QLabel *lab2 = new QLabel(this);
    lab2->setGeometry(0,0,800,533);
    lab2->setStyleSheet("QLabel{border-image:url(fish_image/seaworld2.png);}");


    //设置动画Animation1
    QPropertyAnimation *Animation1 = new QPropertyAnimation(lab1,"geometry",this);
    Animation1->setDuration(10000);//这个动画用时10秒

    Animation1->setKeyValueAt(0,QRect(-800,0,800,533));
    Animation1->setKeyValueAt(1,QRect(0,0,800,533));


    //设置动画Animation2
    QPropertyAnimation *Animation2 = new QPropertyAnimation(lab2,"geometry",this);
    Animation2->setDuration(10000);//这个动画用时10秒
    Animation2->setKeyValueAt(0,QRect(0,0,800,533));
    Animation2->setKeyValueAt(1,QRect(800,0,800,533));


    //把动画Animation1和动画Animation1加入动画组group
    QParallelAnimationGroup *group = new QParallelAnimationGroup();
    group->addAnimation(Animation1);
    group->addAnimation(Animation2);
    group->start();//动画组播放
    group->setLoopCount(-1);//设置循环播放

动画的效果是把两张图片拼接起来,实现背景滚动的效果

  • 动画效果如下:
    在这里插入图片描述
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 黑马qt公开课是一套为期5天的课件,主要介绍了Qt框架的基础知识和应用。Qt框架是一个跨平台的开发工具,可以方便地进行应用程序的设计、开发和调试,被广泛应用于图形界面开发、嵌入式系统和移动应用等领域。 在5天的课程中,学习者将对Qt框架的整体架构有一个全面的认识,包括Qt及其常用库的概念、功能和用法,也学会了如何使用Qt Designer进行界面设计和基于信号与槽的事件编程。 此外,课程还将介绍Qt中常用的编程模式和技术,如MVC架构、文件操作、网络编程等,并通过实例让学习者深入理解和应用这些概念和技术。 5天的课件中还提供了大量的实践操作,让学习者通过编写实际案例,深入理解所学知识,并更好地掌握Qt框架的基础和应用,为以后的工作打下坚实的基础。 总之,如果你想快速入门Qt框架的基础知识和应用,那么黑马qt公开课—5天的课件,将是一个非常好的选择。 ### 回答2: 黑马qt公开课的课件共分为5天,内容涵盖了Qt的基础知识、UI设计、绘图系统、多线程编程和网络编程等方面。通过这5天的学习,学员可以全面掌握Qt的开发技能和应用场景,具备开发Qt应用程序的能力。 第一天课程主要介绍了Qt的基础知识,包括Qt窗口和控件、信号与槽机制、事件处理、布局和样式等内容。通过这些基础知识的学习,学员可以了解Qt的基本工作原理和操作方法。 第二天的课程主要讲解了Qt的UI设计,包括UI设计器的使用、自定义控件和样式等内容。学员可以从中学习到如何设计美观、直观的用户界面。 第三天的课程则主题为Qt的绘图系统,包括2D和3D绘图、动画效果和图形转换等内容。在这一天的课程中,学员可以学习到如何使用Qt进行图形绘制和界面效果的优化。 第四天的课程主要介绍了Qt的多线程编程,包括线程的创建和管理、互斥锁和信号量等内容。学员可以从中学习到如何在Qt中实现多线程应用程序。 第五天的课程则主题为Qt的网络编程,包括socket编程、HTTP协议和Web服务等内容。学员可以从中学习到如何使用Qt进行网络编程,实现客户端和服务器的互通。 总体来说,黑马qt公开课的5天课程涵盖了Qt的核心知识点,让学员能够全面掌握Qt的开发技能和应用场景。通过这些课程的学习,学员可以成为一名合格的Qt开发工程师。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值