QTableView InternalMove使用自定义模型进行拖放

时间:2019-02-15 10:39:01

标签: c++ qt model-view-controller tableview qt5

我知道类似的问题被问了上千遍,但是我找不到任何合适的解决方案。也许我只是做错了。
我有一个带有自定义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类型。

0 个答案:

没有答案