通过拖放重新排序Qt Listview

时间:2017-05-26 05:19:50

标签: qt listview qml

我已经尝试了http://agateau.com/2016/reordering-a-listview-via-dragndrop-3/中描述的方法来实现listview中的拖放支持。 但是,当列表中的项目数量增加时,在拖动时滚动会出现问题。

要重现此问题,请从https://github.com/agateau/listviewdragitem/tree/3-placeholders下载项目。将列表中的项目数量增加三倍,并尝试将项目(除了第一项之外的所有项目)拖动到列表的末尾。当列表滚动一段时间后,拖动的tem将消失。我没有发现任何发出的信号表明阻力已经完成。

出于某种原因,第一项可以正确移动。

您是否有任何可能导致此行为的建议?

1 个答案:

答案 0 :(得分:4)

第一个Item没有消失的原因是currentItem被保护以免被删除。

其他Item突然消失的原因是ListView实例化并销毁Item s,因为它认为它们是可见的。这意味着:因为它们在原始位置上可见。

currentIndex设置为正在拖动的Item的索引,以防止其被销毁。

此外,您可以使用DelegateModel并将相关Item添加到持久群组,以防止破坏。