QTableView拖动移动行

时间:2012-08-28 22:46:55

标签: qtableview

我使用带有QTableViewQAbstractTableModel的{​​{1}},以便我可以点击表格标题对项目进行排序。我想添加选项,供用户通过拖动手动对视图中的行进行排序。我不需要能够从/向任何外部应用程序拖放,只需更改列表中的顺序即可。我也不需要更改模型中的数据,我只希望视图中的顺序不同。

我一直在查看文档,似乎我必须实现QSortFilterProxyModelmimeTypesmimeData,但这会非常复杂!我的模型中的某些数据实际上并未显示在视图中,就像我说的那样,我不想更改模型中的数据顺序。有没有办法简单地拖动项目来改变他们的排序(就像标题已经能够做到的那样)没有大量的编码?

1 个答案:

答案 0 :(得分:10)

更新了QT5以删除弃用的方法

如果您正在使用PyQT,您需要做的就是:

your_tableview.verticalHeader().setSectionsMovable(True)
your_tableview.verticalHeader().setDragEnabled(True)
your_tableview.verticalHeader().setDragDropMode(QAbstractItemView.InternalMove)

然后用horizontalHeader冲洗并重复,如果你想要那些可重新排列的话。

你是绝对正确的,你不应该触摸甚至不知道这个功能的模型是什么。通过在模型本身上正确使用QSortFilterProxyModel装饰器可以进一步证明这一点。

您看到的关于mimeTypes和所有这些东西的内容是用于从其他窗口/应用程序/桌面/等拖放不同来源的实际对象,而您当前尝试完成的内容则不需要。