我知道类似的问题被问了上千遍,但是我找不到任何合适的解决方案。也许我只是做错了。
我有一个带有自定义QTableView
的{{1}}。模型具有重新实现的成员函数:
QAbstractTableModel
columnCount
rowCount
data
flags
moveRows
supportedDropActions
supportedDragActions
的设置是:
QTableView
setDragEnabled(true)
setDragDropOverwriteMode(false)
setDragDropMode(QAbstractItemView::InternalMove)
setDefaultDropAction(Qt::MoveAction)
setSelectionMode(QAbstractItemView::ExtendedSelection)
我希望能够通过拖放对setSelectionBehavior(QAbstractItemView::SelectRows)
和基础模型中的行进行重新排序。此外,这些动作不应删除并插入模型中,因为根本不应该删除基础数据,而只能对其进行重新排序。
相反,在放下事件QTableView
会在模型上调用QTableView
,仅此而已。 removeRows
从未调用,甚至没有moveRows
(尽管我不希望它被擦除和插入,但我希望它被移动)。
我认为insertRows
应该只在基础模型上调用QTableView
,但是尽管moveRows
设置为removeRows
和{{ 1}}至dragDropMode
。我认为这看起来很奇怪。
如何(如果有的话)使InternalMove
仅在模型中移动所需的行?为何不需要删除就调用defaultDropAction
?在MoveAction
模式下发生拖放时,QTableView
对底层模型的调用是什么,我该如何适当地改变这种行为?我应该继承removeRows
的子类吗?如果是这样,我应该重新实现哪些成员函数?
关于MIME类型:我不需要将此数据拖到窗口小部件的外部,只需内部重新排序即可。所以我想我也不需要MIME类型。