2

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

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

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

4

1 回答 1

0

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

您很可能已经覆盖了QAbstractItemModel::dropMimeData模型的 - 方法。true如果掺杂的 mime 数据由该方法处理,则该方法应该返回,否则返回 false。诀窍是返回falseifaction是 a MoveAction,即使数据被正确处理(在该方法中实现处理)。视图认为放置不成功,因此不会删除拖动的项目。

也许,破解返回值会在更复杂的设置中产生一些问题,但它适用于我的简单案例。

于 2020-01-13T08:25:45.513 回答