【问题标题】:Unable to inherit from QAbstractItemModel无法从 QAbstractItemModel 继承
【发布时间】:2018-01-31 09:13:43
【问题描述】:

我是 PyQt 中的模型/视图的新手,在创建从 QAbstractItemModel 类继承的对象时遇到问题。这是继承自它的类:

class MyCustomDataModel(QAbstractItemModel):

    def __init(self, parent = None):
        super(MyCustomDataModel, self).__init__(parent)

        self.parent = parent

这是另一个尝试实例化上述类型对象的类:

class MyCustomType(AnotherCustomTypeThatInheritsQListWidgetItem):

    def __init__(self, parent = None):
        super(MyCustomType, self).__init__(parent)

        # Instantiate a model:
        self.dataModel = MyCustomDataModel(self)

上述实例化在运行时抛出以下错误: “QAbstractItemModel(QObject parent = None):参数 1 具有意外类型'MyCustomType'”我看不出问题出在哪里,但我对 Python / PyQt 还是很陌生。有人可以指出我做错了什么吗?我试过调用实例化行并且没有传递任何东西,但我得到了同样的错误。

【问题讨论】:

  • 经过一些试验,如果封装对象在其继承链中的任何位置都有一个 QListWidgetItem ,似乎就会出现错误。不知道如何从这里开始。建议任何人?
  • 你为什么要将QListWidgetItem 与自定义项目模型一起使用?更重要的是,你为什么要为每一个项目创建一个新的项目模型?如果您是 pyqt 新手,我建议您使用 QStandardItemModel
  • 错误信息告诉你一些问题。显然 QAbstractItemModel 的构造函数不喜欢你给它的东西。是时候查看文档以了解它真正想要的内容了。查找 Qt 类文档通常很有帮助:doc.qt.io/qt-5/classes.html
  • @ekhumoro:我从 QListView 开始,但无法让拖放功能正常工作。我求助于将 QListWidget 和 QListWidgetItem(s) 与自定义模型一起使用,因为拖放按我需要的方式工作。我为每个 QListWidgetItem 对象使用一个模型,因为这些对象与填充小部件网格的复杂项目特定的多字段数据相关联。
  • @Trilarion:感谢您提供的有用链接。我已经为它添加了书签。

标签: pyqt pyqt4


【解决方案1】:

这可能更适合作为评论而不是答案。

尝试更新将 MyCustomType 实例传递给 MyCustomDataModel 的行:

self.dataModel = MyCustomDataModel(self)

改为使用:

self.dataModel = MyCustomDataModel()

【讨论】:

  • 谢谢你,这有效......至少,错误消失了。但我不明白我的错误。如果我想在实例化过程中为 MyCustomDataModel 分配一个父级怎么办?
  • MyCustomType 实例传递给super(MyCustomDataModel, self).__init__(parent) 中的QAbstractItemModel 时出现错误。 QAbstractItemModel 是一个不接受您构建的自定义对象的对象。如果您要继承QAbstractItemModel,那么您需要将MyCustomType 构造为可接受的对象(即继承QAbstractItemModel 所期望的类)。我想这可能有助于理解您为什么要使用QAbstractItemModelAnotherCustomTypeThatInheritsQListWidgetItem 设置上述继承。
  • 这似乎是一件直截了当的事情,即创建一个继承自 QAbstractItemModel 的新类,并通过添加一个或两个成员属性来扩展它。怎么会事先知道将这个新类的对象放在另一个继承自 QListWidgetItem 的类中的行为会破坏它?
  • @LKeene。把它放在另一个类中是不相关的。回溯显示模型的 parent 参数必须是 QObject。但是MyCustomType 不是QObject 的子类 - 因此出现错误。这里没有什么神秘之处。如果您将 python dict 传递给 int() 函数,您将得到类似的结果(即 TypeError)。
猜你喜欢
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2016-03-04
  • 2011-12-07
  • 1970-01-01
相关资源
最近更新 更多