アニメーション
Qt Quick は、プロパティをアニメーション化する機能を提供します。プロパティをアニメーション化することで、プロパティの値をターゲット値に即座に変更するのではなく、中間値を経由して変化させることができます。アイテムの位置をアニメーション化するには、そのアイテムの位置を制御するプロパティ(例えば x や y)をアニメーション化することで、ターゲット位置に到達するまでの各フレームごとにアイテムの位置が変化するようにできます。
滑らかなUI
QMLは、滑らかなUIの作成を容易にするように設計されています。これらは、UIコンポーネントが突然出現したり、消えたり、飛び跳ねたりするのではなく、アニメーションで変化するユーザーインターフェースです。Qt Quick には、UIコンポーネントを新しい位置に瞬時に表示するのではなく、アニメーションで移動させるための2つの簡単な方法が用意されています。
状態と遷移
Qt Quick State オブジェクトでは、さまざまなUI状態を宣言できます。これらの状態は、基本状態からのプロパティの変更で構成されており、UIロジックを整理する上で有用な手段となります。遷移は、アイテムに関連付けることができるオブジェクトであり、状態変化によってプロパティが変更される際に、そのアニメーションの仕方を定義します。
アイテムの状態と遷移は、Item::states およびItem::transitions プロパティを使用して宣言できます。状態は、通常はコンポーネントのルートアイテムであるアイテムのstates listプロパティ内で宣言されます。同じアイテムで定義された遷移は、状態の変化に伴うアニメーションに使用されます。以下に例を示します。
Item {
id: container
width: 320
height: 120
Rectangle {
id: rect
color: "red"
width: 120
height: 120
TapHandler {
onTapped: container.state === '' ? container.state = 'other' : container.state = ''
}
}
states: [
// This adds a second state to the container where the rectangle is farther to the right
State { name: "other"
PropertyChanges {
target: rect
x: 200
}
}
]
transitions: [
// This adds a transition that defaults to applying to all state changes
Transition {
// This applies a default NumberAnimation to any changes a state change makes to x or y properties
NumberAnimation { properties: "x,y" }
}
]
}プロパティの変更をアニメーション化する。
Behaviors を使用すると、プロパティが変更された際に適用するアニメーションを指定できます。このアニメーションは、変更の原因にかかわらず、すべての変更に適用されます。次の例では、Behaviors を使用して、ボタンが画面上を移動するアニメーションを実装しています。
Item {
width: 320
height: 120
Rectangle {
color: "green"
width: 120
height: 120
// This is the behavior, and it applies a NumberAnimation to any attempt to set the x property
Behavior on x {
NumberAnimation {
//This specifies how long the animation takes
duration: 600
//This selects an easing curve to interpolate with, the default is Easing.Linear
easing.type: Easing.OutBounce
}
}
TapHandler {
onTapped: parent.x == 0 ? parent.x = 200 : parent.x = 0
}
}
}その他のアニメーション
すべてのアニメーションが特定のプロパティや状態に紐づく必要はありません。より一般的な方法でアニメーションを作成し、アニメーション内で対象となるアイテムやプロパティを指定することも可能です。以下に、そのさまざまな方法の例をいくつか示します。
Item {
width: 320
height: 120
Rectangle {
color: "blue"
width: 120
height: 120
// By setting this SequentialAnimation on x, it and animations within it will automatically animate
// the x property of this element
SequentialAnimation on x {
id: xAnim
// Animations on properties start running by default
running: false
loops: Animation.Infinite // The animation is set to loop indefinitely
NumberAnimation { from: 0; to: 200; duration: 500; easing.type: Easing.InOutQuad }
NumberAnimation { from: 200; to: 0; duration: 500; easing.type: Easing.InOutQuad }
PauseAnimation { duration: 250 } // This puts a bit of time between the loop
}
TapHandler {
// The animation starts running when you click within the rectangle
onTapped: xAnim.running = true
}
}
}
Item {
width: 320
height: 120
Rectangle {
id: rectangle
color: "yellow"
width: 120
height: 120
TapHandler {
// The animation starts running when you click within the rectangle
onTapped: anim.running = true;
}
}
// This animation specifically targets the Rectangle's properties to animate
SequentialAnimation {
id: anim
// Animations on their own are not running by default
// The default number of loops is one, restart the animation to see it again
NumberAnimation { target: rectangle; property: "x"; from: 0; to: 200; duration: 500 }
NumberAnimation { target: rectangle; property: "x"; from: 200; to: 0; duration: 500 }
}
}
アニメーションに関する詳細情報は、「Qt Quick の重要な概念 - 状態、遷移、およびアニメーション」ページをご覧ください。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.