当前位置: 首页 > 知识库问答 >
问题:

ListView with section,删除对顶部项目无效的动画

乐健
2023-03-14
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15

Window {
    visible: true
    width: 400
    height: 400

    ListView {
        id: list
        anchors.fill: parent
        clip: true
        spacing: 0

        onContentYChanged: console.log("onContentYChanged: " + contentY)
        onContentHeightChanged: console.log("onContentHeightChanged: " + contentHeight)

        model: ListModel {
            id: myModel
            ListElement {name: "Item 1";type: "A"}
            ListElement {name: "Item 2";type: "A"}
            ListElement {name: "Item 3";type: "B"}
        }

        delegate: Rectangle {
            width: parent.width
            height: 50
            color: (index % 2 == 1) ? "#5678a2" : "#88a345"

            Text {
                anchors.verticalCenter: parent.verticalCenter
                text: name
            }

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    console.log("remove: " + index + ", contentY:" + list.contentY)
                    myModel.remove(index)
                }
            }
        }

        section.property: "type"
        section.delegate: Rectangle {
            height: 30
            Text {
                anchors.verticalCenter: parent.verticalCenter
                text: section
            }
        }

        displaced: Transition {
            NumberAnimation { properties: "x,y"; duration: 500; easing.type: Easing.OutCubic }
        }
        remove: Transition {
            NumberAnimation { property: "opacity"; from: 1.0; to: 0; duration: 500 }
            NumberAnimation { property: "scale"; from: 1.0; to: 0; duration: 500 }
        }
    }
}
qml: onContentHeightChanged: 300
qml: onContentHeightChanged: 240
qml: onContentHeightChanged: 210
qml: remove: 0, contentY:0
qml: onContentYChanged: 80
qml: onContentHeightChanged: 160
  • 删除除顶部以外的其他项目。
  • 禁用该节或动画。

共有1个答案

孟晨朗
2023-03-14

我用QT5.13.1尝试了您的代码。目前正在下载QT5.15。目前,它看起来像是部分的bug,因为我在BugTracker上发现了许多未关闭的bug报告。我可以给你建议两种解决问题的方法。

  1. 在锁定移除时执行动画。
  2. 使用带有类别的模型。

我用Meself测试的第一种解决方案。以下是您尝试它所需更改的内容:

ListView.onRemove: SequentialAnimation {
                        PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: true }
                        ParallelAnimation {
                            NumberAnimation { target: wrapper; property: "opacity"; to: 0; duration: 500 }
                            NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 500 }
                        }
                        PropertyAction { target: wrapper; property: "ListView.delayRemove"; value: false }
                    }

我没有尝试实现它,但我可以想象有这样一个模型:

ListModel {
    id: myModel
    ListElement { type: "category"; name: "cat1" }
    ListElement { name: "delegate1"; type: "delegate"; catrgory: "cat1"}
    ListElement { name: "delegate2"; type: "delegate"; catrgory: "cat1"}
    ListElement { name: "delegate3"; type: "delegate"; catrgory: "cat1"}
    ListElement { type: "category"; name: "cat2" }
    ListElement { name: "delegate4"; type: "delegate"; catrgory: "cat2"}

若要按照您的意愿使用此方法,您需要相应地对委托进行castomize,并相应地对删除函数进行castomize,这将导致与正常工作时相比,代码要复杂得多。

UPD:5.15中同样的问题

 类似资料:
  • 我有一个底部导航视图,其中显示了所选项目的背景 下面是底部导航视图xml代码: 我想删除显示在所选项目顶部的顶部填充,这样背景可以匹配底部条的高度

  • 我正在尝试实现一个MapView,其中最上面是一个SurfaceView,它们都单独工作得很好,但是当我将它们都放在FrameLayout中时,我无法获得 getHolder().getSurface().isValid() 如真的。 XML: SurfaceView代码: 公共类BallSurfaceView扩展SurfaceView实现Runnable { 在MapActivity中创建: 受

  • 问题内容: 因此,在尝试使用flexbox创建有用的模式时,我发现了似乎是浏览器的问题,并且想知道是否存在已知的修复程序或解决方法-或有关解决方法的想法。 我要解决的问题有两个方面。首先,使模态窗口垂直居中,这可以按预期工作。第二个是使模式窗口滚动-从外部滚动,因此整个模式窗口滚动,而不是其中的内容滚动(这样您就可以使用下拉菜单和其他可以扩展到模式范围之外的UI元素-例如自定义日期选择器等) 但是

  • 我有一个旧的谷歌云项目,我就是不能删除。 当我通过网站这样做时,我会得到一个“项目服务未知错误跟踪号码:342342354345” 当我使用命令通过CLI执行此操作时: gcloud项目删除“项目” 我得到一个错误: 错误:(gcloud.projects.delete)失败\u前提条件:前提条件检查失败。 “@type”:类型。古格里皮斯。com/谷歌。rpc。资源信息 资源名称:项目/7777

  • 问题内容: 我的机器上安装了Java 6和7。Gradle使用1.7(使用选中)。但是我需要编译代码以与Java 1.6兼容。据我了解的文档,我可以使用属性来实现(并间接使用,默认为 )。 因此,我将以下行添加到了我的构建文件中(在根级别,而不是在任何闭包中): (确保在某些试验中我也添加了,但这应该没有什么不同) 为了检查结果是否实际上与1.6兼容,我将产生的jar解压缩到文件夹中,并在遇到的第

  • 问题内容: 最近我收到以下错误: 致命异常:NSInternalInconsistencyException无效更新:部分0中的项目数无效。更新(13)之后现有部分中包含的项目数必须等于更新(12)前该部分中包含的项目数,再加上或减去从该部分插入或删除的项目数(插入0,删除0),再加上或减去从该部分移入或移出的项目数(移入0,移出0)。 我的tvOS客户端中的以下代码中发生错误: 我在集合视图中仅