gpt4 book ai didi

Qt 快速 1.1 : How to slide elements out of a QML listview when removed?

转载 作者:行者123 更新时间:2023-12-02 12:18:38 26 4
gpt4 key购买 nike

在我的应用程序 UI 中,我在 QML listview 中显示了许多元素。当其中一个被删除时,它应该以动画方式向上滑动到其上方的元素后面。实现此目的的代码确实类似于 this sample根据 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 上的行为指定为 PropertyAnimation 来为 y 方向上的任何元素移动设置动画,如 this sample 所示。 ;当显式设置 y 属性时(例如在 MouseArea::onClicked 处理程序中),此方法有效,但当 y 更改时没有动画隐式地因为元素被删除。

我还尝试对其他属性进行动画处理,例如 heightscale,如 Dynamic List ListView Example 中所做的那样。并将其与不透明度相结合,但由于该元素有些复杂,结果看起来非常棒 - 并且设计部门非常明确,该元素确实应该向上滑动。

如何向上滑动一个元素并让下面的元素一起移动?这在 Qt 4.8/Qt Quick 1.1 中可能吗? Qt 5/Qt Quick 2.0 对于这个具体问题有什么改进吗?

最佳答案

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

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

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

关于Qt 快速 1.1 : How to slide elements out of a QML listview when removed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com