当我尝试从数据库实体创建树模型时,PyQt5 QAbstractItemModel 崩溃

问题描述 投票:0回答:1

我尝试实现一个自己的模型来表示树,以便 QT 视图可以访问我的数据库实体(我不可能使用 QT 的 SQL 支持,所以我必须处理模型)。 它工作得很好,因为我只使用了一张桌子,但现在我正在努力将其适应树模型。

存在一种类型“A”的实体,每个实体都有任意数量的子实体(另一种实体类型/表),此处称为“B”。

一开始,树视图什么也没有显示,但是当我对同一模型使用表格视图时,至少会显示空单元格。 现在程序在启动后或多或少会直接关闭。

我想使用我自己的委托(第一列中适用于旧表模型的删除按钮),并且我不想使用 QStandardItemModel,因为我必须为每个实体的每列管理一个项目。

我已经研究过并且非常确定如果我实施它会起作用:

  • columnCount
  • rowCount
  • index
  • parent
  • data
  • flags
  • headerData

其中第一个行为根据父索引而有所不同,因此例如顶级 (

QModelIndex()
) 的 rowCount 返回 A 实体的计数,对于 A 实体的任何索引,返回子 B 实体的数量。

我认为主要问题在于我的

index
parent
的过载。我使用索引的内部指针来存储我在父方法中返回的父索引。

我尝试了一个非常简单的示例,其中包含指定数量的行和列,其中数据方法仅返回格式化行和列的字符串。 当我启动示例几秒钟时,会显示一个包含我的数据的表格,然后应用程序关闭而不进行回溯。

进程已完成,退出代码为 -1073741819 (0xC0000005)
无论我在终端还是 PyCharm 中运行程序,都不会生成回溯。

Qt.DisplayRole

也没有显示任何东西。

QAbstractItemModelTest

venv 中的版本:

Python:3.10.8
  • 点:23.2.1
  • PyQt5 5.15.9
  • PyQt5-Qt5:5.15.2
  • PyQt5-sip:12.12.2
  • 这只是一个简单的例子,我不知道其余的是否有效。我认为 QT 树模型会更容易。 我也尝试采用
https://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

但我没有发现任何有启发性的不同之处。

python model-view-controller model pyqt pyqt5
1个回答
0
投票
https://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

。我首先不明白为什么需要一个自己的类以及为什么这不是由 QT 完成的,但正如注释所解释的那样,使用内部指针来保存索引是行不通的。因此,有一个自己的班级更好。

© www.soinside.com 2019 - 2024. All rights reserved.