【发布时间】:2012-05-02 06:56:24
【问题描述】:
我需要在 PyQt 中使用 QAbstractItemModel 和 QTreeView。
在 dropMimeData 方法中,我想删除源行(如果它是某个 MIME_TYPE。)如何获取源的行和 parentIndex?还是我需要通过其他方法做到这一点。
def dropMimeData(self, mimedata, action, row, column, parentIndex):
【问题讨论】:
-
你确定 QTreeWidget 不够用了吗? QTreeView + QStandardItemModel 怎么样?您有什么需要子类化并创建自己的自定义模型?
-
@Tim:我认为您的编辑虽然是的,但它确实说明了问题的明确性,但确实显着改变了 OP 可能提出的问题。您发表评论并让 OP 调整该问题可能会更好。我更感兴趣的是听到他为什么需要一个抽象模型,而不是他关于 dropMimeData 的问题,我认为这实际上可能无关紧要。
-
@jdi 我还没有确定任何事情。我从我能找到的最接近我需要的东西开始。我需要一棵源项目树(现在只有一列名称)和另一棵我想删除这些项目的树。在目标树上,我需要将项目移动到不同的位置。我假设这将是一个内部拖放然后删除源项目。我使用子类模型只是为了有一种方法来判断项目来自哪棵树,所以我不会从源树中删除任何东西。
-
@jdi 我找不到像 internalMove 一样的 DragDropMode 并且还允许从另一个视图拖放。应该有一个更简单的方法来做到这一点,我会很感激学习它。其他人建议使用子类。
-
QAbstractItemModel 适用于您需要自定义类型的模型时,但仅用于进行拖放而不是必需的。你将不得不实施比你应该需要的更多。 QStandardItemModel 应该功能齐全并且可以与 QTreeView 一起使用。您只需将其中一个子类化,然后重新实现 dragEvent/dropEvent 方法。如果你想保留两个完全独立的模型,那么抛弃这整个混乱,只继承具有内置模型的 QTreeWidget。
标签: pyqt qtreeview qabstractitemmodel