Qt Quick 예제 - 애니메이션
QML 애니메이션 예제 모음입니다.
애니메이션은 애니메이션과 관련된 작은 QML 예제 모음입니다. 각 예제는 특정 유형이나 기능을 강조하는 작은 QML 파일입니다.
애니메이션에 대한 자세한 내용은 Qt Quick - 상태, 전환 및 애니메이션의 중요 개념을 참조하세요.
예제 실행하기
에서 예제를 실행하려면 Qt Creator에서 Welcome 모드를 열고 Examples 에서 예제를 선택합니다. 자세한 내용은 예제 빌드 및 실행하기를 참조하세요.
ColorAnimation
ColorAnimation은 컬러 애니메이션을 사용하여 하늘을 낮에서 밤으로 페이드합니다.
gradient: Gradient { GradientStop { position: 0.0 SequentialAnimation on color { loops: Animation.Infinite ColorAnimation { from: "#14148c"; to: "#0E1533"; duration: 5000 } ColorAnimation { from: "#0E1533"; to: "#14148c"; duration: 5000 } } } GradientStop { position: 1.0 SequentialAnimation on color { loops: Animation.Infinite ColorAnimation { from: "#14aaff"; to: "#437284"; duration: 5000 } ColorAnimation { from: "#437284"; to: "#14aaff"; duration: 5000 } } } }
PropertyAnimation
PropertyAnimation은 숫자 애니메이션을 사용하여 원을 위아래로 바운스합니다.
// Animate the y property. Setting loops to Animation.Infinite makes the // animation repeat indefinitely, otherwise it would only run once. SequentialAnimation on y { loops: Animation.Infinite // Move from minHeight to maxHeight in 300ms, using the OutExpo easing function NumberAnimation { from: smiley.minHeight; to: smiley.maxHeight easing.type: Easing.OutExpo; duration: 300 } // Then move back to minHeight in 1 second, using the OutBounce easing function NumberAnimation { from: smiley.maxHeight; to: smiley.minHeight easing.type: Easing.OutBounce; duration: 1000 } // Then pause for 500ms PauseAnimation { duration: 500 } }
애니메이터
애니메이터는 애니메이터를 사용하여 아이콘을 위아래로 바운스합니다.
SequentialAnimation { SequentialAnimation { ParallelAnimation { YAnimator { target: smiley; from: smiley.minHeight; to: smiley.maxHeight easing.type: Easing.OutExpo; duration: 300 } ScaleAnimator { target: shadow from: 1 to: 0.5 easing.type: Easing.OutExpo; duration: 300 } } ParallelAnimation { YAnimator { target: smiley; from: smiley.maxHeight; to: smiley.minHeight easing.type: Easing.OutBounce; duration: 1000 } ScaleAnimator { target: shadow from: 0.5 to: 1 easing.type: Easing.OutBounce; duration: 1000 } } } PauseAnimation { duration: 500 } running: true loops: Animation.Infinite }
동작
동작은 동작을 사용하여 사용자가 클릭한 위치로 직사각형을 이동합니다.
// Set an 'elastic' behavior on the focusRect's y property. Behavior on y { NumberAnimation { easing.type: Easing.OutElastic easing.amplitude: 3.0 easing.period: 2.0 duration: 300 } }
흔들리는 텍스트
흔들리는텍스트는 보다 복잡한 동작을 사용하여 드래그할 때 일부 텍스트에 애니메이션을 적용하고 흔들리는 것을 보여줍니다. 각 문자에 복잡한 바인딩을 할당하여 이를 수행합니다:
x: follow ? follow.x + follow.width : container.width / 6 y: follow ? follow.y : container.height / 2
그런 다음 동작을 사용하여 각 문자의 움직임에 애니메이션을 적용합니다:
Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } } Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
Tv Tennis
Tv Tennis 는 복잡한 동작을 사용하여 패들이 공을 따라 움직이도록 하여 무한 테니스 게임을 시뮬레이션합니다. 여기에서도 다른 값에 따라 달라지는 바인딩이 위치 및 동작에 적용되어 애니메이션을 제공합니다.
커브 완화
이징커브는 Qt Quick 애니메이션에서 사용할 수 있는 모든 이징 커브를 보여줍니다.
상태
상태는 항목의 속성이 상태 간에 어떻게 달라질 수 있는지 보여줍니다.
여러 상태를 정의합니다:
// In state 'middleRight', move the image to middleRightRect State { name: "middleRight" PropertyChanges { userIcon { x: middleRightRect.x y: middleRightRect.y } } }, // In state 'bottomLeft', move the image to bottomLeftRect State { name: "bottomLeft" PropertyChanges { userIcon { x: bottomLeftRect.x y: bottomLeftRect.y } } }
전환
전환은 상태 예제를 사용하여 전환을 설정하여 속성 변경을 애니메이션화합니다:
// Transitions define how the properties change when the item moves between each state transitions: [ // When transitioning to 'middleRight' move x,y over a duration of 1 second, // with OutBounce easing function. Transition { from: "*"; to: "middleRight" NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce; duration: 1000 } }, // When transitioning to 'bottomLeft' move x,y over a duration of 2 seconds, // with InOutQuad easing function. Transition { from: "*"; to: "bottomLeft" NumberAnimation { properties: "x,y"; easing.type: Easing.InOutQuad; duration: 2000 } }, // For any other state changes move x,y linearly over duration of 200ms. Transition { NumberAnimation { properties: "x,y"; duration: 200 } }
PathAnimation
PathAnimation은 PathAnimation 을 사용하여 베지어 곡선을 따라 이미지를 애니메이션합니다.
PathAnimation { id: pathAnim duration: 2000 easing.type: Easing.InQuad target: box orientation: PathAnimation.RightFirst anchorPoint: Qt.point(box.width/2, box.height/2) path: Path { startX: 50; startY: 50 PathCubic { x: window.width - 50 y: window.height - 50 control1X: x; control1Y: 50 control2X: 50; control2Y: y } onChanged: canvas.requestPaint() } }
PathInterpolator
PathInterpolator는 대신 PathInterpolator 를 사용하여 동일한 베지어 곡선을 따라 이미지를 애니메이션합니다.
PathInterpolator { id: motionPath path: Path { startX: 50; startY: 50 PathCubic { x: window.width - 50 y: window.height - 50 control1X: x; control1Y: 50 control2X: 50; control2Y: y } onChanged: canvas.requestPaint() } SequentialAnimation on progress { running: true loops: -1 PauseAnimation { duration: 1000 } NumberAnimation { id: progressAnim running: false from: 0; to: 1 duration: 2000 easing.type: Easing.InQuad } } }
© 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.