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

时间:2017-11-02 21:37:09

标签: qt drag-and-drop qabstractitemmodel qabstractitemview

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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