我在QAbstractItemView的源代码中注意到,void startDrag(Qt::DropActions supportedActions)方法在一次类型为MoveAction()的拖动之后调用了一些clearOrRemove()私有函数,这将删除选定的项。
要点是,当在同一视图中发生drop操作时,我的模型使用moveRows()实现该操作,因此这些行被移动,然后clearOrRemove()将它们移除,就像它们是原始行一样。
如何防止最后一次删除?我是否错过了实现move-only模型的惯用方式(即项目可以移动,但不能添加/删除)?
发布于 2020-01-13 16:25:46
我遇到了同样的问题,并找到了一个解决方法:
很可能您已经覆盖了模型的QAbstractItemModel::dropMimeData-method。如果被篡改的mime数据由该方法处理,则该方法应返回true,否则返回false。如果action是一个MoveAction,则技巧是返回false,即使数据被正确处理(在该方法中实现处理)。视图认为拖放不成功,因此不会移除被拖动的项。
也许,在更复杂的设置中,修改返回值会产生一些问题,但它适用于我的简单情况。
https://stackoverflow.com/questions/47085034
复制相似问题