为什么QAbstractItemView拖放MoveAction后会删除元素?

问题描述 投票:2回答:1

我在QAbstractItemView的源代码中注意到,方法void startDrag(Qt::DropActions supportedActions)在类型为clearOrRemove()的拖动后会调用某些MoveAction()私有,]会删除所选项目。

要点是,当在同一视图中发生放置动作时,我的模型使用moveRows()实现该动作,因此将这些行移动,然后clearOrRemove()将其删除,就像它们是原始行一样。

如何防止最后一次删除?我是否错过了实现仅移动模型的惯用方式(意味着可以移动但不能添加/删除项目)?

qt drag-and-drop qabstractitemmodel qabstractitemview
1个回答
0
投票

我遇到了同样的问题,找到了解决方法:

[您很有可能已覆盖模型的QAbstractItemModel::dropMimeData方法。如果该方法处理的是模仿的mime数据,则该方法应返回true,否则返回false。技巧是即使falseaction,也要返回MoveAction,即使数据已正确处理(在该方法内实现处理)。该视图认为拖放未成功,因此不会删除拖动的项目。

也许,破解返回值会在更复杂的设置中产生一些问题,但在我的简单情况下仍然有效。

© www.soinside.com 2019 - 2024. All rights reserved.