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