Roson讲Qt#38 QML Type之Transition

1.数据成员概览


animations : list<Animation>
enabled : bool
from : string
reversible : bool
running : bool
to : string 

2.详细描述

Transition定义了当状态发生变化时应用的动画。
例如,下面的矩形有两种状态:默认状态和添加的“移动”状态。在“移动”状态下,矩形的位置变为(50,50)。添加的过渡指定当矩形在默认和“移动”状态之间改变时,任何对x和y属性的改变都应该是动画的,使用easinginoutquad。

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Rectangle {
         id: rect
         width: 100; height: 100
         color: "red"

         MouseArea {
             id: mouseArea
             anchors.fill: parent
         }

         states: State {
             name: "moved"; when: mouseArea.pressed
             PropertyChanges { target: rect; x: 50; y: 50 }
         }

         transitions: Transition {
             NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad }
         }
     }

}

Roson讲Qt#38 QML Type之Transition

注意,这个示例不需要NumberAnimation的to和from值。为了方便起见,这些属性会自动设置为状态改变前后的x和y值;from值由x和y的当前值提供,to值由PropertyChanges对象提供。如果您愿意,您可以以任何方式提供to和from值来覆盖默认值。
默认情况下,Transition的动画应用于父项目中的任何状态变化。可以设置from到to值的过渡,以限制动画只适用于从一个特定的状态更改到另一个。
要定义多个转换,指定Item::transitions转换为列表: 

  transitions: [
    Transition {
        from: "stop"; to: "go"
        PropertyAnimation { target: stopLight
                            properties: "color"; duration: 1000 }
    },
    Transition {
        from: "go"; to: "stop"
        PropertyAnimation { target: goLight
                            properties: "color"; duration: 1000 }
    } ]

如果指定了多个Transition,那么对于任何特定的状态更改,只会应用一个(最佳匹配的)Transition。在上面的示例中,当更改为state1时,将使用第一个转换,而不是更通用的第二个转换。
如果状态更改具有与行为匹配相同属性的Transition,则Transition动画将覆盖该状态更改的Behavior。
参见Qt Quick中的动画和过渡,状态示例,Qt Quick States和Qt QML。

3.数据成员详细介绍

3.1 [default] animations : list<Animation>

此属性保存了要为此转换运行的动画的列表。

  transitions: Transition {
      PropertyAnimation { duration: 3000 }
      ColorAnimation { duration: 3000 }
  }

注意:PropertyAnimation和ColorAnimation都继承于Animation.

 

*动画是并行运行的。要按顺序运行它们,请在SequentialAnimation中定义它们:

  transitions: Transition {
      SequentialAnimation {
          PropertyAnimation { property: "x"; duration: 1000 }
          ColorAnimation { duration: 1000 }
      }
  }

3.2 enabled : bool

此属性用于保存从一个状态移动到另一个状态时是否运行Transition。  

默认情况下,Transition是启用的。  

注意,在某些情况下,禁用一个Transition可能会导致在其位置上使用另一个Transition。 在下面的例子中,虽然第一个Transition被设置为animate changes from "state1" to "state2",但是通过将enabled设置为false,这个Transition已经被禁用,所以任何这样的状态更改实际上将由第二个Transition来动画。  

  Item {
      states: [
          State { name: "state1" },
          State { name: "state2" }
      ]
      transitions: [
          Transition { from: "state1"; to: "state2"; enabled: false },
          Transition {
              // ...
          }
      ]
  }

3.3 from : string

这些属性指示触发转换的状态更改。
这些属性的默认值是“*”(即任何状态)。
例如,下面的过渡没有设置to和from属性,所以当在两种状态之间改变时(即当鼠标被按下和释放时),动画总是被应用。

  Rectangle {
      id: rect
      width: 100; height: 100
      color: "red"

      MouseArea { id: mouseArea; anchors.fill: parent }

      states: State {
          name: "brighter"; when: mouseArea.pressed
          PropertyChanges { target: rect; color: "yellow" }
      }

      transitions: Transition {
          ColorAnimation { duration: 1000 }
      }
  }

如果转换被改成这样:

  transitions: Transition {
      to: "brighter"
      ColorAnimation { duration: 1000 }
  }

动画只会在从默认状态切换到“brighter”状态(即鼠标被按下而不是释放时)时应用。
可以使用逗号分隔的字符串设置多个往返值。
参见reversible

3.4 reversible : bool

此属性保存当触发此转换的条件被逆转时是否应自动逆转此转换。
默认值为false。
默认情况下,转换并行运行,如果未设置from和to状态,则将转换应用于所有状态更改。在这种情况下,当状态更改被逆转时,转换将自动应用,并且不需要设置此属性来逆转转换。
但是,如果使用了SequentialAnimation,或者设置了from或to属性,则需要设置此属性以在恢复状态更改时逆转转换。例如,当鼠标被按下时,下面的过渡将应用一个顺序动画,而当鼠标被释放时,则将动画顺序反转:

  Rectangle {
      id: rect
      width: 100; height: 100
      color: "red"

      MouseArea { id: mouseArea; anchors.fill: parent }

      states: State {
          name: "brighter"
          when: mouseArea.pressed
          PropertyChanges { target: rect; color: "yellow"; x: 50 }
      }

      transitions: Transition {
          SequentialAnimation {
              PropertyAnimation { property: "x"; duration: 1000 }
              ColorAnimation { duration: 1000 }
          }
      }
  }

如果转换没有设置to和reversible的值,那么在鼠标释放时,转换将在ColorAnimation之前执行PropertyAnimation,而不是反转序列。


3.5 running : bool

此属性用于确定转换当前是否正在运行。
此属性为只读。

3.6 to : string

这些属性指示触发转换的状态更改。
这些属性的默认值是“*”(即任何状态)。
例如,下面的过渡没有设置to和from属性,所以当在两种状态之间改变时(即当鼠标被按下和释放时),动画总是被应用。

  Rectangle {
      id: rect
      width: 100; height: 100
      color: "red"

      MouseArea { id: mouseArea; anchors.fill: parent }

      states: State {
          name: "brighter"; when: mouseArea.pressed
          PropertyChanges { target: rect; color: "yellow" }
      }

      transitions: Transition {
          ColorAnimation { duration: 1000 }
      }
  }

如果转换被改成这样:

  transitions: Transition {
      to: "brighter"
      ColorAnimation { duration: 1000 }
  }

动画只会在从默认状态切换到“亮”状态(即鼠标被按下而不是释放时)时应用。
可以使用逗号分隔的字符串设置多个往返值。
参见reversible

上一篇:CSS


下一篇:树莓派应用2:Aria2离线下载