如何使用QAbstractItemModel?

时间:2012-04-20 17:02:59

标签: pyqt qtreeview qabstractitemmodel

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

在dropMimeData方法中,我想删除源行(如果它是某个MIME_TYPE。)如何获取源的行和parentIndex?或者我需要从其他方法那样做。

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

1 个答案:

答案 0 :(得分:3)

我的评论运行时间太长,所以我想我现在就用信息开始回答。

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

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

使用QStandardItemModel + QTreeView允许您使用相同的模型拥有多个视图,并同时将其可视化。但鉴于您说要保留两组不同的独立数据,并且您不熟悉Qt,我强烈建议您只使用两个QTreeWidgets。 QTreeWidget是视图和模型的全包包。这对您来说现在更容易使用。

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

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