QTableView拖动移动行

6 qtableview

我正在使用a QTableView和a QAbstractTableModel,QSortFilterProxyModel以便我可以通过单击表格标题对项目进行排序.我想为用户添加选项,通过拖动来手动对视图中的行进行排序.我不需要能够从/向任何外部应用程序拖放,只需更改列表中的顺序即可.我也不需要更改模型中的数据,我只希望视图中的顺序不同.

我一直在寻找通过的文件,而且好像我要实现mimeTypes,mimeDatadropMimeData,但是这会非常复杂快!我的模型中的一些数据实际上并没有显示在视图中,就像我说的那样我不想改变模型中的数据顺序.有没有办法简单地拖动项目来改变他们的排序(就像标题已经能够做到)没有大量的编码?

UpA*_*dam 10

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

如果你正在使用PyQT所有你需要做的就是这个:

your_tableview.verticalHeader().setSectionsMovable(True)
your_tableview.verticalHeader().setDragEnabled(True)
your_tableview.verticalHeader().setDragDropMode(QAbstractItemView.InternalMove)
Run Code Online (Sandbox Code Playgroud)

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

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

你看到的关于mimeTypes和所有这些东西的东西是用于从其他windows/applications/desktop/etc拖放不同来源的实际对象,而你当前想要完成的东西不需要它们.

  • 原帖询问移动行;它是verticalHeader,而不是如答案所述的horizo​​ntalHeader。此外,setMovable 已过时,现在应该是 setSectionsMovable。文档说 setMovable 仍然存在,但是在 Qt Creator 的 Qt 5.5.1 中,它不会为我编译。 (2认同)