qml 触发动画

本文介绍了在QtQuick中四种触发动画的方法:直接触发、点击触发、独立触发和按压触发,以火箭发射的不同姿势为例,展示了如何在用户交互中实现动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发动画有多种方式,这里介绍4种,分别是:

        直接触发、点击触发、独立触发、按压触发。

案例:火箭发射的4种姿势 ~

main.qml 

import QtQuick

Window {
    width: 800
    height: 500
    visible: true
    title: qsTr("触发动画")

    ClickableImage {
        id: img1
        source: "image/火箭3.png"
        y: 450
        text: "程序运行即触发"


        NumberAnimation on y {
            to: -5
            duration: 3000
        }
    }

    ClickableImage {
        id: img2
        source: "image/火箭3.png"
        x: 200
        y: 385
        text: "点击图片触发"

        // 这里就是行为触发,点击后y的值被修改则触发动画
        Behavior on y {
            NumberAnimation {
               duration: 3000
            }
        }
        onClicked: y = -5
    }

    ClickableImage {
        id: img3
        source: "image/火箭3.png"
        x: 400
        y: 385
        text: "独立触发"

        NumberAnimation {
            id: am
            target: img3 // target指定哪个对象产生动画(targets可以同时指定多个对象)
            from: 385 // from指定数值动画的起始值,和property同时使用
            to: -5 // to指定数值动画的目标值,即动画达到此值结束
            duration: 3000
            property: "y" // property指定哪个值变化,一般和from同时使用
        }

        // restart方法可以重复触发动画,start只能触发一次,
        // 但由于此处是独立动画,所以2个方法都可以起到重复触发的功能
        onClicked: am.start()
    }

    ClickableImage {
        id: img4
        source: "image/火箭3.png"
        x: 600
        y: 385
        text: "按压触发"

        NumberAnimation {
            id: am1
            target: img4
            from: 385
            to: -5
            duration: 3000
            property: "y"
            running: msa.pressed //这里用的是pressed,而不是pressed(),因为我们只需要它的状态,而不是方法
        }

        MouseArea {
            id: msa
            anchors.fill: parent
        }
    }
}

ClickableImage.qml 

import QtQuick

Item {
    id: root
    width: container.childrenRect.width // 宽高设置为子元素的宽高
    height: container.childrenRect.height

    property alias text: label.text
    property alias source: image.source

    signal clicked

    Column {
        id: container

        Image {
            id: image
        }

        Text {
            id: label
            width: image.width
            wrapMode: Text.WordWrap // 开启自动换行
            horizontalAlignment: Text.AlignHCenter // 设置文本项宽度和高度内文本的水平和垂直对齐方式
            color: "black"
        }
    }

    MouseArea {
        anchors.fill: parent
        onClicked: root.clicked()
    }
}

 第4种的按压触发,有个有意思的地方,就是如果快速点击,而不是持续按压,火箭会有个跳动的效果。如果后期放在一些文字特效上使用,应该效果不错,挺丝滑的 ~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵呜角角

如果对你有所帮助,哪怕1毛钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值