【问题标题】:QTableView drag move rowsQTableView 拖动移动行
【发布时间】:2012-08-28 22:46:54
【问题描述】:

我将QTableViewQAbstractTableModelQSortFilterProxyModel 一起使用,以便我可以通过单击表格标题对项目进行排序。我想为用户添加选项,通过拖动它们来手动对视图中的行进行排序。我不需要能够从/向任何外部应用程序拖放,只是为了更改列表中的顺序。我也不需要更改模型中的数据,我只希望视图中的顺序不同。

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

【问题讨论】:

  • 您还有问题吗?我可以尝试给你一个如何轻松拖放的答案。但是,根据我的经验,不可能将特定行插入到 sorted 模型中:如果您有一个条目“a”,并告诉它在任何行中插入“b”,它将始终插入“a”下方。

标签: qtableview


【解决方案1】:

针对 QT5 进行了更新以删除不推荐使用的方法

如果您使用的是 PyQT,您只需满足以下要求:

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

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

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

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

【讨论】:

  • QHeaderView 继承自 QAbstractItemView.... 所以它也属于 QHeaderView。我从来没有说过它没有。你想说什么?也许您应该考虑一下为什么根据OP的要求我故意不修改整个tableview..
  • 在进一步阅读之后,似乎还有一个使用 setSectionsMovable 的选项
  • 抱歉打扰了,没注意。删除我的评论以免造成误导
  • 无法想象这会奏效。 QAbstractTableModel 对数据一无所知。必须进行某种重新实现。
  • 原帖询问移动行;它是verticalHeader,而不是答案所述的horizo​​ntalHeader。此外,setMovable 已过时,现在应该是 setSectionsMovable。文档说 setMovable 仍然存在,但在 Qt Creator 的 Qt 5.5.1 中,它不会为我编译。
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多