我在QAbstractItemView
的源代码中注意到,方法void startDrag(Qt::DropActions supportedActions)
在类型为clearOrRemove()
的拖动后调用了一些MoveAction()
私有,这会删除所选项目。
点是,当在同一视图中发生放置操作时,我的模型使用moveRows()
实现操作,因此移动行,然后clearOrRemove()
将它们删除,就好像它们是原始行一样。
如何防止最后删除?我是否错过了实现仅限移动模型的惯用方法(意味着项目可以移动但不能添加/删除)?
答案 0 :(得分:0)
我遇到了同样的问题,找到了解决方法:
您很有可能已覆盖模型的QAbstractItemModel::dropMimeData
方法。
如果多态的mime数据由该方法处理,则该方法应返回true
,否则返回false。
诀窍是即使false
是action
,也要返回MoveAction
,即使数据已正确处理(在该方法中实现处理)。
该视图认为拖放操作不成功,因此不会删除拖动的项目。
也许,破解返回值会在更复杂的设置中产生一些问题,但这在我的简单情况下有效。