7

在我的应用程序 UI 中,我在QML 列表视图中显示了许多元素,当其中一个被删除时,它应该以动画方式向上滑动到其上方的元素后面。实现这一点的代码与 Qt 文档中的这个示例非常相似,只是我为坐标设置动画y而不是scale并且我需要减少z值以确保元素在其上方的元素后面而不是前面滑动:

Component {
    id: delegate
    Item {
        ListView.onRemove:
            SequentialAnimation {
                // enable delayed removal
                PropertyAction {
                    target: wrapper
                    property: "ListView.delayRemove"
                    value: true
                }
                // make box slide up behind rather
                // than in front of the box above
                PropertyAction {
                    target: wrapper
                    property: "z"
                    value: wrapper.z - 1
                }
                NumberAnimation {
                    target : wrapper
                    property : "y"
                    from : wrapper.y
                    to   : wrapper.y - wrapper.height
                    duration    : style.removeTransitionDuration
                    easing.type : style.removeTransitionType
                }
                // disable delayed removal
                PropertyAction {
                    target: wrapper
                    property: "ListView.delayRemove"
                    value: false
        }
    }
}

这段代码基本上可以工作,但有一个巨大的缺陷:当被删除的元素向上滑动时,它下面的元素保持在原处,只有在元素完全消失后才“跳”到新位置。我希望它们在被移除的元素向上滑动时向上移动。

我试图y通过指定Behavior on y为 a 来为任何方向的元素运动设置动画PropertyAnimation,如本示例所示;这在y显式设置属性时有效(例如在处理程序中),但是当由于元素被删除而隐式更改MouseArea::onClicked时没有动画。y

我还尝试为其他属性设置动画,例如动态列表 ListView 示例中所做的height或将其与向上滑动。scaleopacity

如何向上滑动一个元素,下面的元素一起移动?这在 Qt 4.8 / Qt Quick 1.1 中是否可行?Qt 5 / Qt Quick 2.0 关于这个特定问题有什么改进吗?

4

1 回答 1

3

ListView 在 Qt Quick 2.0 中有一些新的属性:

  1. remove:“此属性保存要应用于从视图中删除的项目的转换。”
  2. removeDisplaced:“此属性保存要应用于视图中的项目的转换,这些项目因删除视图中的其他项目而移位。”

removeDisplaced 应该是您要查找的属性。不幸的是,我不知道 Qt Quick 1.0 中的方法。

于 2013-09-11T09:19:37.070 回答