QML提供了丰富的动画元素,说起动画,无非是给UI增光添彩罢了。在QML中,动画常常与State和Transition联系在一起,这几个概念(下面的例子中都用到了)都比较简单,相关介绍可查看Qt官方文档,网址如下:

http://doc.qt.io/qt-5/qtquick-statesanimations-topic.html

下面先列举几个QML动画元素,动画效果可“忘文生意”:

PropertyAnimation(常用)

AnchorAnimation

ColorAnimation

NumberAnimation

ParentAnimation

PathAnimation

RotationAnimation

Vector3dAnimation

SequentialAnimation

ParalleAnimation

PauseAnimation

SmoothedAnimation

SpringAnimation

PropertyAction(无动画效果)

ScriptAction

Behavior(设置默认动画)

常见的QML动画有三种表示方式,下面一一说明。

1、使用State和Transition

State改变属性值,Transition实现动画,例子如下:

  1. import QtQuick 2.2
  2. Item {
  3. id: container
  4. width: 360
  5. height: 360
  6. Rectangle {
  7. id: rect
  8. width: 100
  9. height: 100
  10. color: "blue"
  11. MouseArea {
  12. anchors.fill: parent
  13. // state属性值为空字符串时('')即默认状态
  14. onClicked: container.state == 'right' ? container.state = '' : container.state = 'right'
  15. }
  16. }
  17. states: State {
  18. name: "right"
  19. // rect水平移动
  20. PropertyChanges {
  21. target: rect
  22. x: 260
  23. }
  24. }
  25. transitions: Transition {
  26. // 数字(x坐标)动画,设置了easing的回弹效果和动画时间
  27. NumberAnimation {
  28. property: "x"
  29. easing.type: Easing.InOutBounce
  30. duration: 500
  31. }
  32. }
  33. }

2、使用Behavior

直接修改上面的例子,实现同样的动画效果,结果如下:

  1. import QtQuick 2.2
  2. Item {
  3. id: container
  4. width: 360
  5. height: 360
  6. Rectangle {
  7. id: rect
  8. width: 100
  9. height: 100
  10. color: "blue"
  11. // 看这里
  12. Behavior on x {
  13. NumberAnimation {
  14. easing.type: Easing.InOutBounce
  15. duration: 500
  16. }
  17. }
  18. MouseArea {
  19. anchors.fill: parent
  20. // 改变rect的x坐标
  21. onClicked: rect.x = (rect.x == 0 ? 260 : 0)
  22. }
  23. }
  24. }

3、其它

还是在上面例子的基础上修改以实现同样的效果,代码如下:

  1. import QtQuick 2.2
  2. Item {
  3. id: container
  4. width: 360
  5. height: 360
  6. Rectangle {
  7. id: rect
  8. width: 100
  9. height: 100
  10. color: "blue"
  11. // rect水平右移
  12. NumberAnimation on x {
  13. id: right
  14. running: false // false
  15. to: 260
  16. easing.type: Easing.InOutBounce
  17. duration: 500
  18. }
  19. // rect水平左移
  20. NumberAnimation on x {
  21. id: left
  22. running: false // false
  23. to: 0
  24. easing.type: Easing.OutInBounce // 换个easing动画效果
  25. duration: 500
  26. }
  27. MouseArea {
  28. anchors.fill: parent
  29. // 判断移动方向
  30. onClicked: rect.x == 0 ? right.running = true : left.running = true
  31. }
  32. }
  33. }

下面再来看一个有意思的例子,parallel和sequential动画:

  1. import QtQuick 2.2
  2. Item {
  3. id: container
  4. width: 360
  5. height: 360
  6. Rectangle {
  7. id: up
  8. width: 100
  9. height: 100
  10. color: "blue"
  11. // 并行动画,水平移动和颜色变化同时进行
  12. ParallelAnimation {
  13. id: parallel
  14. running: false
  15. PropertyAnimation {
  16. target: up
  17. property: "x"
  18. to: 260
  19. duration: 500
  20. }
  21. PropertyAnimation {
  22. target: up
  23. property: "color"
  24. to: "red"
  25. duration: 500
  26. }
  27. }
  28. MouseArea {
  29. anchors.fill: parent
  30. onClicked: parallel.running = true
  31. }
  32. }
  33. Rectangle {
  34. id: down
  35. width: 100
  36. height: 100
  37. color: "red"
  38. anchors.top: up.bottom
  39. // 串行动画,先进行水平移动,后进行颜色变化
  40. SequentialAnimation {
  41. id: sequential
  42. running: false
  43. PropertyAnimation {
  44. target: down
  45. property: "x"
  46. to: 260
  47. duration: 500
  48. }
  49. PropertyAnimation {
  50. target: down
  51. property: "color"
  52. to: "blue"
  53. duration: 500
  54. }
  55. }
  56. MouseArea {
  57. anchors.fill: parent
  58. onClicked: sequential.running = true
  59. }
  60. }
  61. }

关于QML动画,Qt官网文档也做了详细的介绍:

http://doc.qt.io/qt-5/qtquick-usecase-animations.html

http://doc.qt.io/qt-5/qtquick-statesanimations-animations.html

http://blog.csdn.net/ieearth/article/details/43986559

QML动画概述(几十篇相关博客)的更多相关文章

  1. 我的第一篇Markdown博客

    我的第一篇Markdown博客 这是我第一次用Markdown写博客,发现还是比较好用的,加上Marsedit也支持了Markdown的博客预览,博客园也加了Markdown的格式支持,就更加方便了, ...

  2. HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET

    HTML5 Canvas动画效果演示 - 流浪的鱼 - 博客频道 - CSDN.NET HTML5 Canvas动画效果演示

  3. Android相关 博客收藏

    #1 Android 网络编程 参考博客 :http://blog.csdn.net/kieven2008/article/details/8210737 #2 Could not find com. ...

  4. Ceph相关博客、网站(256篇OpenStack博客)

    官网文档: http://docs.ceph.com/docs/master/cephfs/ http://docs.ceph.com/docs/master/cephfs/createfs/   ( ...

  5. Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)

    已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...

  6. 基于Laravel开发博客应用系列 —— 十分钟搭建博客系统

    1.创建文章数据表及其模型(0:00~2:30) 我们已经在上一节中为博客项目完成了大部分准备工作,现在首先要做的就是为这个项目创建一个新的文章表 posts及该表对应的模型类 Post,使用如下Ar ...

  7. 第十六周博客作业 <西北师范大学| 周安伟>

    第十六周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10980707 ...

  8. 第十五周博客作业 <西北师范大学| 周安伟>

    第十五周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10946673 ...

  9. 第十二周博客作业 <西北师范大学| 周安伟>

    第十二周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10831971 ...

随机推荐

  1. ServletContextListener接口用法

    ServletContextListener接口用于tomcat启动时自动加载函数,方法如下: 一.需加载的类必须实现ServletContextListener接口. 二.该接口中有两个方法必须实现 ...

  2. 在Windows中安装MinGW-w64(有图,一步一步)

    在Windows中安装MinGW-w64 发表回复 如需配合Sublime Text 3编译C程序, 请参考本站文章: 使用Sublime Text 3与MinGW-w64编译C语言程序 MinGW, ...

  3. Qt实用技巧:使用QTableView、QSqlTableMode与QSqlDatabase对数据库数据进行操作

    本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78615800 Qt实用技巧:使用QTableView.QSqlTableMode与Q ...

  4. 链接hdf5库出现错误的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在链接hdf5库出现一些链接错误: error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUB ...

  5. 设置vista和win7进入Debug模式

    转载请标明是引用于 http://blog.csdn.net/chenyujing1234 欢迎大家拍砖 设置vista和win7进入Debug模式: 1. bcdedit /copy  {curre ...

  6. Android 异步更新UI----handler+thread

    android应用是单线程模式的. 单线程模式需要记住两条: 一.防止UI线程阻塞 二.确保只在UI线程中访问Android UI工具包 在开发Android应用时必须遵守单线程模型的原则:Andro ...

  7. VAssist 使用技巧(函数声明定位,比VS的还要强大)

    1. 有了VAX可以关掉C++导航栏,快捷键ALT+M,显示当前打开文档的所有符号,而且可以输入进行过滤 2. 查找文件,shift+alt+o (直接定位) 3. 查找符号shift+alt+s 4 ...

  8. Qt 的几个核心机制总结之 布局(QWidget可以设置setSizePolicy,而QSizePolicy有Fixed,minimum,maximum,preferred,expanding,ignore等7个属性,还可以横竖分开)

    1.Qt布局的作用 Qt的布局是通过布局管理器来实现的,布局管理器负责在父类窗口部件区域构建子窗口部件,使得放置在窗体中的每个窗口部件都有一个适合的大小和位置,并且能够随着应用程序本身的变化而变化从而 ...

  9. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)

    David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...

  10. DOS符号转义(转 http://www.robvanderwoude.com/escapechars.php)

    Escape Characters Character to be escaped Escape Sequence Remark % %% May not always be required in ...