使用例 - QMLにおけるアニメーション
Qt Quickにはプロパティをアニメーションさせる機能があります。プロパティをアニメーションさせることで、プロパティの値がすぐに目標値に変化するのではなく、中間的な値を移動することができます。アイテムの位置をアニメーションさせるには、アイテムの位置をコントロールするプロパティ、例えばxとyをアニメーションさせることで、アイテムの位置がターゲット位置へ向かう途中の各フレームで変化するようにすることができます。
流動的なUI
QMLは、流体UIの作成を容易にするように設計されています。これは、UIコンポーネントが突然現れたり、消えたり、ジャンプしたりするのではなく、アニメーションするユーザーインターフェースのことです。Qt Quick では、UIコンポーネントが新しい場所に即座に現れるのではなく、アニメーションしながら移動するための2つの簡単な方法を提供しています。
ステートとトランジション
Qt Quick では、 オブジェクトでさまざまな UI ステートを宣言できます。これらのステートは、ベース・ステートからのプロパティ変更で構成され、UIロジックを整理する便利な方法となります。トランジションは、アイテムに関連付けることができるオブジェクトで、ステートの変更によってプロパティが変化したときに、そのプロパティがどのようにアニメーションするかを定義します。State
アイテムのステートとトランジションは、Item::states とItem::transitions プロパティで宣言できます。状態は、アイテムの状態リストプロパティ(通常はコンポーネントのルートアイテム)の中で宣言されます。同じアイテムに定義されたトランジションは、ステートの変化をアニメートするために使用されます。以下に例を示します。
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" } } ] }
プロパティの変化のアニメーション
ビヘイビアを使用して、プロパティの変更時に使用するアニメーションを指定できます。これは、ソースに関係なく、すべての変更に適用されます。次の例では、ビヘイビアを使用して、ボタンがスクリーン上を動き回る様子をアニメーション化しています。
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 の重要な概念 - ステート、トランジション、アニメーション」のページを参照してください。
© 2025 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.