qml实现按钮水波纹显示

Rectangle {
        id: root
        anchors.centerIn: parent
        width: 200
        height: 100
        color: "green"

        Text {
            anchors.centerIn: parent
            text: "Hello Qt!"
            font.pixelSize: 36
        }

        MouseArea {
            id: mouseArea
            anchors.fill: parent
            onPressed: {
                var posToTopLeft = Math.sqrt(Math.pow(mouseArea.mouseX, 2)+Math.pow(mouseArea.mouseY, 2))
                var posToTopRight = Math.sqrt(Math.pow(mouseArea.mouseX-root.width, 2)+Math.pow(mouseArea.mouseY, 2))
                var posToBottomLeft = Math.sqrt(Math.pow(mouseArea.mouseX, 2)+Math.pow(mouseArea.mouseY-root.height, 2))
                var posToBottomRight = Math.sqrt(Math.pow(mouseArea.mouseX-root.width, 2)+Math.pow(mouseArea.mouseY-root.height, 2))
                showRect.calWidth = Math.max(posToTopLeft, posToTopRight, posToBottomLeft, posToBottomRight)*2
                seqAni.restart()
            }
        }
    }

    Rectangle {
        id: mask
        anchors.fill: root
        color: "#50ffffff"
        visible: false

        Rectangle {
            id: showRect

            property real calWidth

            x: mouseArea.mouseX-width/2
            y: mouseArea.mouseY-height/2
            width: 10
            height: width
            radius: width/2
        }
    }

    SequentialAnimation {
        id: seqAni
        PropertyAction {
            target: mask
            property: "visible"
            value: "true"
        }

        PropertyAnimation {
            target: showRect
            property: "width"
            from: 10
            to: showRect.calWidth
            duration: 500
        }
    }

    OpacityMask {
          anchors.fill: root
          source: root
          maskSource: mask
      }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值