赞
踩
使用QML差不多2年了,在使用过程中深深的感受到QML的强大与便捷,让我深陷其中,不能自拔。其中QML相比传统的界面最大的优势就是便捷的动画效果与炫酷的粒子效果,让QML做出来的界面能媲美WPF和各种JS前端框架的效果。下面我们就开始进入QML动画美妙的世界吧。
与传统的界面相比,现代化的程序界面的特色是更加鲜艳的色彩,以及更加丰富的动画。QML设计的目的就是用来创建Fluid UIs(流体界面),所谓流体界面,就是UI组件是动态的,而不会突然出现、消失或跳转,QML的动画效果就很好的实现了流体界面的要求。
在QML中,实现动画最常用的是State(状态)&Transactions(过渡) 与 Animating Properyty Changes(属性改变动画)这两种方法。
QML可以在组件中声明各种State(状态),在状态中可以包含该组件所需修改的属性值,当我们想改变组件的属性值时,只需该组件的State即可。Transaction(过渡)用来设置状态改变时的动画,常与State配合使用。创建一个Transaction对象,然后将其添加到组件的transcation属性中。使用方法如下:
以下代码展示的是使用State&Transactions方法实现一个页面切换的动画效果。
- Window {
- visible: true
- width: 400; height: 300
- title: "Animation"
-
- Rectangle { anchors.fill: parent; color: "green" }
-
- Rectangle {
- id: pageA
- color: "red"
- width: parent.width; height: parent.height
-
- // 创建2个状态"show","hide"分别表示显示界面和隐藏界面
- states: [
- // 将PageA的属性y赋值为0,opacity赋值为1以实现显示的效果
- State {
- name: "show"; PropertyChanges { target: pageA; y: 0; opacity: 1 }
- },
- // 将PageA的属性y赋值为-height,opaticy赋值为0以实现窗口向上移动并消失的效果
- State {
- name: "hide"; PropertyChanges { target: pageA; y: -height; opacity: 0 }
- }
- ]
-
- state: "show"
-
- transitions: Transition {
- PropertyAnimation { properties: "y,opacity"; duration: 1000; easing.type: Easing.InOutBack }
- }
- }
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if(pageA.state == "show")

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。