一、效果预览

在这里插入图片描述

二、源码分享

import QtQuick
import QtQuick.Controls

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: "Test"
    property int cnt:cnt = model.count
    ListModel{
        id:model
        ListElement{index:0}
        ListElement{index:1}
        ListElement{index:2}
        ListElement{index:3}
    }

    GridView{
        id:gridView
        anchors.fill: parent
        model: model
        cellWidth: 50
        cellHeight: 50
        anchors.margins: 20
        delegate: delegateModel
        onAddChanged: console.log("add")
    }
    Component{
        id:delegateModel
        Rectangle{
            id:wapper
            width: 40
            height: 40
            color: "red"
            required property int index
            Text {
                anchors.fill: parent
                text: index
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                font{
                    pixelSize: 16
                    bold:true
                }
            }
            GridView.onAdd:{
                console.log("add")
                addAnim.start()
            }
            GridView.onRemove:{
                console.log("remove")
                removeAnim.start()
            }
            ScaleAnimator{
                id:addAnim
                target: wapper
                from:0
                to:1
                duration: 200
            }
            SequentialAnimation{
                id:removeAnim
                PropertyAction{
                    target: wapper
                    property: "GridView.delayRemove"
                    value:true

                }

                ScaleAnimator{

                    target: wapper
                    from:1
                    to:0
                    duration: 200
                }
                PropertyAction{
                    target: wapper
                    property: "GridView.delayRemove"
                    value:false

                }
            }


            MouseArea{
                anchors.fill: parent
                onClicked: {
                    model.remove(index)
                    cnt--
                }
            }
        }

    }
    Button{
        anchors.bottom: parent.bottom
        width: parent.width
        height: 40
        onClicked: {
            var data = {index:cnt}
            model.append(data)
            cnt++
        }
    }

}

三、源码解析

1、添加动画

 GridView.onAdd:{
                console.log("add")
                addAnim.start()
            }
ScaleAnimator{
         id:addAnim
         target: wapper
         from:0
         to:1
         duration: 200
     }

2、删除动画

GridView.onRemove:{
      console.log("remove")
      removeAnim.start()
  }
  SequentialAnimation{
      id:removeAnim
      PropertyAction{
          target: wapper
          property: "GridView.delayRemove"
          value:true

      }
      ScaleAnimator{

          target: wapper
          from:1
          to:0
          duration: 200
      }
      PropertyAction{
          target: wapper
          property: "GridView.delayRemove"
          value:false

      }
  }

删除动画尤为重要,要按照这个格式设置才行,否则无效果。

原文地址:https://blog.csdn.net/qq_15181569/article/details/134710949

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35414.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注