我使用带有QTableView
和QAbstractTableModel
的{{1}},以便我可以点击表格标题对项目进行排序。我想添加选项,供用户通过拖动手动对视图中的行进行排序。我不需要能够从/向任何外部应用程序拖放,只需更改列表中的顺序即可。我也不需要更改模型中的数据,我只希望视图中的顺序不同。
我一直在查看文档,似乎我必须实现QSortFilterProxyModel
,mimeTypes
和mimeData
,但这会非常复杂!我的模型中的某些数据实际上并未显示在视图中,就像我说的那样,我不想更改模型中的数据顺序。有没有办法简单地拖动项目来改变他们的排序(就像标题已经能够做到的那样)没有大量的编码?
答案 0 :(得分:10)
更新了QT5以删除弃用的方法
如果您正在使用PyQT,您需要做的就是:
your_tableview.verticalHeader().setSectionsMovable(True)
your_tableview.verticalHeader().setDragEnabled(True)
your_tableview.verticalHeader().setDragDropMode(QAbstractItemView.InternalMove)
然后用horizontalHeader
冲洗并重复,如果你想要那些可重新排列的话。
你是绝对正确的,你不应该触摸甚至不知道这个功能的模型是什么。通过在模型本身上正确使用QSortFilterProxyModel
装饰器可以进一步证明这一点。
您看到的关于mimeTypes和所有这些东西的内容是用于从其他窗口/应用程序/桌面/等拖放不同来源的实际对象,而您当前尝试完成的内容则不需要。