Delegate动画案例(P30 5.6delegate动画)

一、ListElement,ListModel,ListView

1. ListElement

ListElement 是 QML 中用于定义列表项的元素。它可以包含多个属性,每个属性对应列表项中的一个数据字段。通过在 ListModel 中使用 ListElement,可以定义一个列表的数据模型。

2. ListModel

ListModel 是 QML 中用于管理列表数据的模型。它可以包含多个 ListElement 元素,每个 ListElement 代表一个列表项。ListModel 提供了一些方法和属性来操作和访问列表数据,比如添加、删除、修改和获取列表项等。

3. ListView

ListView 是 QML 中用于显示列表数据的视图组件。它可以将 ListModel 中的数据以列表的形式展示出来,并提供了滚动、分页等功能。ListView 可以根据需要自定义列表项的外观,并支持动态更新列表数据。

4. 三者的区别和联系?

ListElement 是用于定义列表项的元素,而 ListModel 是用于管理列表数据的模型。

ListElement 是 ListModel 中的一个子元素,通过多个 ListElement 可以定义多个列表项。

ListView 使用 ListModel 作为数据源,将 ListModel 中的数据以列表的形式展示出来。

二、案例

如下图所示,点击红色方块会逐渐消失,点击底部绿色按钮会新增红色方块。

三、实现代码

main.qml

import QtQuick

Rectangle{
    width: 480; height: 300

    gradient: Gradient{
        GradientStop{ position: 0.0; color: "#dbddde"}
        GradientStop{ position: 1.0; color: "#5fc9f8"}
    }

    /*---------------------------按钮----------------------------*/
    Rectangle{
        property int count: theModel.count //这里用等号,就相当于只绑定了一次,保证count的值一直是追加的状态

        anchors.bottom: parent.bottom //锚定到窗口底部
        anchors.left: parent.left //锚定到窗口左边
        anchors.right: parent.right //锚定到窗口右边
        anchors.margins: 20 //间隙为20

        height: 40
        color: "#53f769"
        border.color: Qt.lighter(color, 1.1) //添加边框的颜色,比按钮的颜色稍浅一点

        Text {
            anchors.centerIn: parent //按钮的文字放在按钮的正中间
            text: "Add Item" //按钮的文字设为 "Add Item"
        }

        MouseArea{
            anchors.fill: parent //按钮触发区域填充满整个父体
            onClicked: {
                theModel.append({"num":++parent.count}) //因为count的值非固定,所以要++
                console.log("num"+parent.count)
            }
        }
    }

    /*---------------------------View----------------------------*/
    GridView{
        anchors.fill: parent
        anchors.margins: 20
        anchors.bottomMargin: 80 //给底部的按钮留出足够的空间,避免重合

        clip: true //平滑显示开启
        cellWidth: 45; cellHeight: 45

        model: theModel
        delegate: numberDelegate
    }

    /*---------------------------Model----------------------------*/
    ListModel{
        id: theModel
        ListElement{ num: 0 }
        ListElement{ num: 1 }
        ListElement{ num: 2 }
        ListElement{ num: 3 }
    }

    /*---------------------------Delegate----------------------------*/
    Component{
        id: numberDelegate

        Rectangle{
            id: wrapper

            gradient: Gradient{
                GradientStop{ position: 0.0; color: "#f8306a"}
                GradientStop{ position: 1.0; color: "#fb5b40"}
            }

            required property int index
            required property int num

            width: 40; height: 40

            Text {
                anchors.centerIn: parent
                text: wrapper.num
                font.pixelSize: 12
            }

            GridView.onAdd: addAnimation.start()
            GridView.onRemove: removeAnimation.start()

            NumberAnimation{
                id: addAnimation
                target: wrapper
                property: "scale"
                from: 0; to: 1
                duration: 250
                easing.type: Easing.InOutQuad
            }

        SequentialAnimation{
            id: removeAnimation

            PropertyAction{
                target: wrapper
                property: "GridView.delayRemove"
                value: true
            }

            NumberAnimation{
                target: wrapper
                property: "scale"
                to: 0
                duration: 250
                easing.type: Easing.InOutQuad
            }

            PropertyAction{
                target: wrapper
                property: "GridView.delayRemove"
                value: false
            }
        }

            MouseArea{
                anchors.fill: parent
                onClicked: {
                    theModel.remove(index)
                }
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/417405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

USB-C接口:办公新宠,一线连接笔记本与显示器

USB-C接口如今已成为笔记本与显示器连接的优选方案。无需担心正反插错,支持雷电4和DP视频信号输出,高速数据传输,还有最高100W的快充功能,真是方便又实用! 一线连接,多功能融合 通过这个接口,你…

面试笔记系列三之spring基础知识点整理及常见面试题

目录 如何实现一个IOC容器? 说说你对Spring 的理解? 你觉得Spring的核心是什么? 说一下使用spring的优势? Spring是如何简化开发的? IOC 运行时序 prepareRefresh() 初始化上下文环境 obtainFreshBeanFactory() 创建并…

瑞_23种设计模式_外观模式

文章目录 1 外观模式(Facade Pattern)1.1 介绍1.2 概述1.3 外观模式的结构 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 jdk源码解析 🙊 前言:本文章为瑞_系列专栏之《23种设计模式》的外观模式篇。本文中的部分…

如何在Windows部署TortoiseSVN客户端并实现公网连接内网VisualSVN服务端

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统,它与Apache Subversion(SVN)集成在一起,提供了一个用户友好的界面,方便用…

Flutter开发之Slider

Flutter开发之Slider 本文是关于介绍Slider相关属性的含义。 class SliderThemeData {/// slider轨道的高度 final double? trackHeight; /// 滑块滑过的轨道颜色 final Color? activeTrackColor; /// 滑块未滑过的轨道颜色 final Color? inactiveTrackColor; /// 滑块滑过…

JavaEE——简单认识JavaScript

文章目录 一、简单认识 JavaScript 的组成二、基本的输入输出和简单语法三、变量的使用四、JS 中的动态类型图示解释常见语言的类型形式 五、JS中的数组六、JS 中的函数七、JS 中的对象 一、简单认识 JavaScript 的组成 对于 JavaScript ,其中的组成大致分为下面的…

多线程如何设计?一对多/多对一/多对多

二、14个多线程设计模式 参考原文:https://www.cnblogs.com/rainbowbridge/p/17443503.html single Thread 模式 一座桥只能通过一个人 Single Thread模式是一种单线程设计模式,即在一个应用程序中只有一个主线程、一个事件循环,对外只提…

【C语言基础】:深入理解指针(一)

文章目录 一、内存和地址1. 内存2. 如何理解编址 二、指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 如何拆解指针变量2.2.3 解引用操作符 2.3 指针变量的大小 三、指针变量类型的意义3.1 指针的解引用3.2 指针 - 整数3.3 void*指针…

什么是物联网?

今天这篇文章写的相关内容就是带领大家了解什么是物联网,之前写的文章大多都是一些物联网的未来,行业的解决方案等;话不多说开始进入正题吧! 物联网(IoT)是一个包罗万象的术语,指的是越来越多的电子产品,它们不是传统的…

vue2+elementui上传照片(el-upload 超简单)

文章目录 element上传附件(el-upload 超详细)代码展示html代码data中methods中接口写法 总结 element上传附件(el-upload 超详细) 这个功能其实比较常见的功能,后台管理系统基本上都有,这就离不开element的…

计算机组成原理4-存储器的层次结构与程序访问的局部性原理

1. 磁盘 1.磁盘的结构 磁盘由盘片构成,每个盘片包含两面 每面由一组称为磁道的同心圆组成 每个磁道划分为一组扇区,扇区之间由间隙隔开 同一半径上的所有磁道组成一个柱面2.磁盘的容量 容量:磁盘上可以存储的最大位数。 决定因素&#xff1a…

【玩转408数据结构】线性表——双链表、循环链表和静态链表(线性表的链式表示 下)

知识回顾 在前面的学习中,我们已经了解到了链表(线性表的链式存储)的一些基本特点,并且深入的研究探讨了单链表的一些特性,我们知道,单链表在实现插入删除上,是要比顺序表方便的,但是…

IDEA利用鼠标调整字体大小

就可以按住ctrl和鼠标调节代码字体的大小啦! 如果有用,记得给我来个赞~ 谢啦!

【python基础学习07课_函数基础课】

一、函数的基础知识 一、函数的作用是用来干什么的? 函数在编程中是一个组织好的、可重复使用的代码块,用于执行一个特定的任务。具体来说,函数的常见作用包括:1、执行计算或数据处理。 2、控制程序的流程,如条件判断…

Java+SpringBoot+Vue+MySQL:员工健康管理技术新组合

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

压缩式 交换式 碎片整理 :(使碎片减少或没有)

交换式碎片整理 首先流程 是 p3这个程序在运行,p1p2p4 的话在等待 ,然后p3这时要多用3个内存块,这是 p4 通过拷贝,将内存拷贝到磁盘上,对应的数据也是从主存中cp到磁盘此时主存多出3个内存块给p3继续使用 2.压缩式碎片…

QML中动态增加表格数据

1.QML中的表格实现 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_modelTabl…

Transformer之self-attention

注意力是一个有助于提高神经机器翻译应用程序性能的概念。在这篇文章中,我们将看看Transformer,一个使用注意力来提高这些模型训练速度的模型。Transformer在特定任务中优于谷歌神经机器翻译模型。最大的好处来自于Transformer如何使自己适合并行化。 在…

135.乐理基础-半音是小二度吗?全音是大二度吗?三全音

内存参考于:三分钟音乐社 上一个内容:134.乐理基础-音程名字的简写-CSDN博客 上一个内容里练习的答案: 半音可以与小二度划等号吗?全音可以和大二度划等号吗? 严格来说它们是不能划等号的,半音与全音是侧…

Android Studio level过滤查看各个等级的日志

Android Studio level过滤查看各个等级的日志 旧版as可以在下方的日志输出框选择debug、info,warn、error日志,新版的需要通过在过滤框手动/联想输入 level:xxx,过滤相应等级的日志,如图: android studio/idea返回/前进…
最新文章