2

我需要在 PyQt 中使用 QAbstractItemModel 和 QTreeView。

在 dropMimeData 方法中,我想删除源行(如果它是某个 MIME_TYPE。)如何获取源的行和 parentIndex?还是我需要通过其他方法做到这一点。

def dropMimeData(self, mimedata, action, row, column, parentIndex):

4

1 回答 1

3

我的评论太长了,所以我想我现在就用这些信息开始回答。

QAbstractItemModel 是一个基类,当您需要一种定制的数据建模方式时,它不适合现有的数据,例如从哪里获取数据以及如何将它们表示为项目。它还没有准备好开箱即用,因为它需要实现许多方法。除非您有令人信服的理由,否则您可能不应该从这门课开始,因为它需要更多的工作才能启动和运行。

对于只需要拖放和使用基本项目,QStandardItemModel 应该准备好供您使用。您只需创建 QStandardItems 并填充模型。对于拖放,您可以对模型进行子类化,并且只需实现适当的 drag*Event 和 drop*Event 方法以满足您的需求。

使用 QStandardItemModel + QTreeView 可以让您拥有多个视图,它们都使用相同的模型并同时将其可视化。但是鉴于您说要保留两组不同的独立数据,并且您是 Qt 的新手,我强烈建议您只使用两个 QTreeWidget。QTreeWidget 是视图和模型的包罗万象的包。这对你来说现在使用起来会容易得多。

使用 QTreeWidget,您可以对它们进行子类化并实现必要的拖放事件,就像您对 QTreeView 所做的那样,但您不再需要单独担心模型。

这是一个关于使用 QTreeWidget 拖放的帖子的链接:http
://www.qtcentre.org/threads/5910-QTreeWidget-Drag-and-drop 他们提到了推荐的实现方法,以及你应该做什么QTreeWidgetItem 的子类来定义 mimeData。

于 2012-04-23T18:04:36.573 回答