QML Book 学习基础3(动画)

这篇具有很好参考价值的文章主要介绍了QML Book 学习基础3(动画)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

主要动画元素

例子:

 非线性动画

分组动画


Qt 动画是一种在 Qt 框架下创建交互式和引人入胜的图形用户界面的方法,我们可以认为是对某个基础元素的多个设置                        

主要动画元素

  • PropertyAnimation-属性值变化时的动画

  • NumberAnimation-qreal类型值变化时的动画

  • ColorAnimation-颜色值变化时的动画

  • RotationAnimation-旋转值变化时的动画

特殊点的

  • PauseAnimation-为动画提供暂停

  • SequentialAnimation-允许按顺序运行动画

  • ParallelAnimation-允许并行运行动画

  • AnchorAnimation-锚定值变化时的动画

  • ParentAnimation-为父元素对象中,值发生变化时的动画

  • SmoothDaniation-允许属性平滑跟踪值

  • SpringAnimation-允许特性跟踪类似弹簧的运动中的值

  • PathAnimation-一个项沿路径变化的动画

  • Vector3dAnimation -为QVector3d值发生变化时的动画

Qt Quick提供了动作元素类型,可以在任何可以使用其他动画元素的地方

  • PropertyAction动画期间,立即更改指定的属性

  • ScriptAction-定义要在动画期间运行的脚本

例子:

PropertyAnimation属性动画提供了一种对属性值的更改进行动画处理的方法。
Image
{
    id:root
    width: 400;height: 400
    //背景
    source: "illustration_2.png"
    //运行状态
    property bool runing: false

    Image{
        id:logo
        source: "logo.png"
        x:(root.width-logo.width)/2
        y:(root.height-logo.height)/2
        //沿X轴移动
        PropertyAnimation on x{
            //沿X轴移动到root.width-logo.width
            to:root.width-logo.width
            //时间2s
            duration:2000
            running: root.runing
        }
        
        // 旋转
        PropertyAnimation on rotation{
            to:360 //旋转角度
            duration:2000
            running: root.runing
        }

        //透明度
        PropertyAnimation on opacity{
            to:0.1
            duration:2000
            running: root.runing
        }

        //响应消息改变运行状态
        MouseArea
        {
            anchors.fill: parent
            onClicked:  root.runing = true
        }
    }
}

QML Book 学习基础3(动画),# QML Book,学习,qtQML Book 学习基础3(动画),# QML Book,学习,qtQML Book 学习基础3(动画),# QML Book,学习,qt

 

 非线性动画

我们现在定义的所有动画都使用线性插值,因为动画的初始缓和类型是Easing.Linear。最好通过一个小的绘图进行可视化下,其中y轴是要设置动画的属性,x轴是时间(持续时间)。线性插值将从动画开始时的“from”值到动画结束时的“to”值绘制一条直线。因此,缓和类型定义了曲线的变化

 关于这段你们可以看示例关键字Easing Curves Example官方示例,或者下面代码

//EasingType.qml
import QtQuick 2.0

Item {
    id:root
    width: 200;height: 200
    property alias image: label.text
    property alias source: image.source
    property var easingTyep;
    signal clicked
    Image
    {
        id:image
        anchors.fill: parent
        source: image

        Text {
            id: label
            text: qsTr("text")
            anchors.horizontalCenter: parent.horizontalCenter
            anchors.bottom: parent.botton
        }
    }


    MouseArea
    {
        anchors.fill: parent
        onClicked: root.clicked()
    }
}
//主函数
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.2

Rectangle
{
    id:root
    width: childrenRect.width
    height: childrenRect.height
    color: "green"
    gradient: Gradient
    {
        GradientStop{position: 0;color:"#8bafce" }
        GradientStop{position: 1;color:"#8edf80"}
    }

    ColumnLayout
    {
        spacing: 20
        Grid
        {
            spacing: 10
            columns: 5
            EasingType{
                image:'InExpo.png'
                easingTyep: Easing.Linear
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutBack.png'
                easingTyep: Easing.OutExpo
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutBounce.png'
                easingTyep: Easing.InOutBounce
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutCirc.png'
                easingTyep: Easing.InOutCirc
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutCubic.png'
                easingTyep: Easing.InOutCubic
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutElastic.png'
                easingTyep: Easing.InOutElastic
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'InOutExpo.png'
                easingTyep: Easing.InOutExpo
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'Linear.png'
                easingTyep: Easing.Linear
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'OutExpo.png'
                easingTyep: Easing.OutExpo
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
            EasingType{
                image:'SineCurve.png'
                easingTyep: Easing.SineCurve
                onClicked:
                {
                    animation.easing.type=easingTyep
                    box.toggle = !box.toggle
                }
            }
        }

        Rectangle
        {
            id:box
            property bool toggle
            width: 100
            height:100
            x:toggle?20:root.width - width - 20
            gradient:Gradient
            {
                GradientStop{position: 0;color: "#eaea81"}
                GradientStop{position: 1;color: "#f4cccc"}
            }
            Behavior on x
            {
                NumberAnimation
                {
                    id:animation
                    duration: 1000
                }
            }
        }
    }
}

 用别的图展示一下吧

QML Book 学习基础3(动画),# QML Book,学习,qt

 

分组动画

顾名思义,可以对动画进行分组。分组可以通过两种方式完成:并行或顺序。可以使用 or 元素,该元素充当其他动画元素的动画容器。这些分组动画本身就是动画,可以完全按照动画使用。SequentialAnimation与ParallelAnimation

QML Book 学习基础3(动画),# QML Book,学习,qt

 

import QtQuick 2.0

Rectangle {

    id:root
    Image
    {
        id:didi
        x:30;y:300
        source:"InOutCirc.png"
        focus:false
        signal clicked
        MouseArea
        {
            anchors.fill: parent
            onClicked:
            {
                anim.restart()
            }
        }
    }

    //ParallelAnimation
    SequentialAnimation
    {
        id:anim
        NumberAnimation {
            target: didi
            property: "y"
            to: 200
            duration: root.duration
        }
        NumberAnimation {
            target: didi
            property: "x"
            to: 150
            duration: root.duration
        }
    }

}

动画嵌套

分组动画也可以嵌套。例如,一个连续动画可以有两个并行动画作为子动画,依此类推。我们可以通过足球的例子来形象化这一点。这个想法是从左到右扔一个球并为其行为添加动画效果

QML Book 学习基础3(动画),# QML Book,学习,qt 

 主函数主要是将图层分成二块

import QtQuick 2.12
import QtQuick.Window 2.12

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

    Rectangle {
        id: sky
        width: root.width
        height: 300
        gradient: Gradient {
            GradientStop { position: 0.0; color: "#0080FF" }
            GradientStop { position: 1.0; color: "#66CCFF" }
        }
    }
    Rectangle {
        id: ground
        anchors.top: sky.bottom
        anchors.bottom: root.bottom
        width: parent.width;height: root.height
        gradient: Gradient {
            GradientStop { position: 0.0; color: "#00FF00" }
            GradientStop { position: 1.0; color: "#00803F" }
        }
    }

    BrightSquare{}
}

为了理解动画,我们需要将其剖析为对象的积分变换。我们需要记住,动画会为属性更改设置动画。以下是不同的转换:

  • 从左到右的 x 平移 (X1)

  • 从下到上 () 的 y 平移,然后是从上到下()的平移,有一些弹跳Y1Y2

  • 在整个动画持续时间内旋转 360 度 (ROT1)

 

import QtQuick 2.0

Rectangle {

    id:root
    Image
    {
        id:didi
        x:10;y:450
        source:"InOutCirc.png"
        focus:false
        signal clicked
        MouseArea
        {
            anchors.fill: parent
            onClicked:
            {
                didi.y = 480 - didi.height
                didi.rotation = 0
                anim.restart()
            }
        }
    }

    //ParallelAnimation
    //SequentialAnimation
    ParallelAnimation
    {
        id:anim
        SequentialAnimation
        {
            NumberAnimation {
                target: didi
                property: "y"
                to: 100
                duration: root.duration
                easing.type:Easing.OutCirc
            }
            NumberAnimation {
                target: didi
                property: "y"
                to: 400
                duration: root.duration
                easing.type:Easing.OutCirc
            }
        }

        NumberAnimation {
            target: didi
            property: "x"
            to: 300
            duration: root.duration
        }

        RotationAnimation
        {
            target: didi
            property: "rotation"
            to:360
            duration: root.duration
        }
    }

}

 文章来源地址https://www.toymoban.com/news/detail-684083.html

到了这里,关于QML Book 学习基础3(动画)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6 Qt Quick UI原型学习QML第七篇

    导入 QtQuick 2.12 导入 QtQuick.Window 2.12 导入 QtQuick.Controls 2.12 导入 QtQuick.Layouts 1.3 导入 Qt.labs.calendar 1.0 矩形 { id: root 属性 int duration: 3000 } 这段代码使用了QtQuick库来创建一个用户界面。其中的Rectangle是界面的根元素。 id: root : 为Rectangle元素指定唯一的标识符root。 property int durat

    2024年02月16日
    浏览(39)
  • Qt6 Qt Quick UI原型学习QML第三篇

    图像 Image(图片)元素 解释 这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释: Image 元素是一个用于显示图像的控件。 id: root 是为Image元素指定了一个标识符,以便在代码中引用它。 signal clicked 定义了一个名为 clicked 的信号。信号用于在特

    2024年02月16日
    浏览(49)
  • Qt6 Qt Quick UI Prototype学习QML第一篇

    创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目 Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它

    2024年02月16日
    浏览(48)
  • Qt/QML编程学习之心得:D-BUS进程间通信(四)

    Qt/QML应用编程最适合于一些触摸的嵌入式界面设计,那么GUI界面怎么与底层的设备通信,怎么与一个系统内其他模块通信的呢?这就不得不说一个很重要的设计模式: d-bus 。  D-BUS是一个系统中消息总线,用于IPC/RPC。消息系统很简单而功能强大,可以在一些命令行实用程序的

    2023年04月20日
    浏览(47)
  • QML动画分组(Grouped Animations)

    通常使用的动画比一个属性的动画更加复杂。例如你想同时运行几个动画并把他们连接起来,或者在一个一个的运行,或者在两个动画之间执行一个脚本。动画分组提供了很好的帮助,作为命名建议可以叫做一组动画。有两种方法来分组:平行与连续。你可以使用SequentialAn

    2024年02月05日
    浏览(31)
  • QML应用动画(Applying Animations)

    目录 一 扩展可点击图像元素版本2(ClickableImage Version2) 1 第一个火箭 2 第二个火箭 3 第三个火箭 动画可以通过以下几种方式来应用: 属性动画 - 在元素完整加载后自动运行; 属性动作 - 当属性值改变时自动运行; 独立运行动画 - 使用start()函数明确指定运行或者running属性

    2024年02月02日
    浏览(30)
  • QML动画实战指南:打造华丽且高性能的用户界面动效

    QML(Qt Meta-Object Language)是一种声明式编程语言,用于设计和实现基于Qt的用户界面。它允许开发者以更简单、高效的方式创建动态、响应式的UI。Qt Quick是Qt的一个子模块,提供了一套基于QML的UI开发框架,可以方便地创建出跨平台的图形用户界面。 动画在现代UI设计中占据着

    2024年02月09日
    浏览(59)
  • Qml Qt程序 打包部署

    利用qtcreator安装目录下的命令行工具执行打包命令 1、Widget程序打包 // 将release模式下的exe文件放在单独的打包目录下 // 打开qt自带的命令行工具,执行下面的语句 windeployqt path-to-app-binary  // path-to-app-binary表示需要打包的二进制文件 2、Qml程序打包 // 延用Widget程序打包步骤,

    2024年02月09日
    浏览(53)
  • 【Qt- C++ & Qml 交互】

    2024年01月10日
    浏览(64)
  • Qt中如何在qml文件中使用其他的qml文件并创建对象

    如果想使用其他的qml文件直接创建对象,必须先这样导入其qml文件并as成别名,才可以创建对象并使用它。 一、导入qml文件,例如: 二、使用别名创建对象 三、使用创建的对象 秋风写于淄博,业务交流与技术咨询:Q375172665

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包