pyqt - 如何使用QAbstractItemModel?

标签 pyqt qtreeview qabstractitemmodel

我需要在 PyQt 中将 QAbstractItemModel 与 QTreeView 一起使用。

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

def dropMimeData(self, mimedata, 操作, 行, 列, ParentIndex):

最佳答案

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

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

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

使用 QStandardItemModel + QTreeView 允许您拥有多个 View ,所有 View 都使用相同的模型,并同时将其可视化为不同的。但考虑到您说您想要保留两组不同的独立数据,并且您是 Qt 新手,我强烈建议您只使用两个 QTreeWidget。 QTreeWidget 是 View 和模型的包罗万象的包。现在您使用起来会更容易。

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

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

关于pyqt - 如何使用QAbstractItemModel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250466/

相关文章:

python - 如何在 QListWidgetItem 周围绘制边框

c++ - 使用自定义小部件自定义 QT QTreeView

c++ - 对于无效的 QModelIndex,重载的 QAbstractItemModel::flags 应该返回什么?

c++ - 如何为 QCombobox 使用模型

qt - Qt模型/ View 和QTableView的基本概念

python 如何显示已 checkin 的复选框

python - PyQt 主窗口与对话框

python - pyqt5循环mp3文件

c++ - 如何在 C++/Qt 中跨越 QTreeView 的列?

c++ - QTreeView 放置在 QDockWidget 中时不显示