QTreeView 的 QAbstractItemModel:我做错了啥?
Posted
技术标签:
【中文标题】QTreeView 的 QAbstractItemModel:我做错了啥?【英文标题】:QAbstractItemModel for QTreeView: what an I doing wrong?QTreeView 的 QAbstractItemModel:我做错了什么? 【发布时间】:2017-03-02 11:18:05 【问题描述】:我想创建一个子类QAbstractItemModel
以在QTreeView
中使用它。起初,我决定制作一个不支持任何层次结构的简约模型。它应该提供一个包含简单文本数据的 2×3 表格(只读)。
唉,它没有崩溃但没有显示任何数据:只有几个列标题(1、2)。谁能告诉我,我做错了什么?
import os, sys
from PyQt5 import QtWidgets, QtCore, QtGui, QtSvg
from PyQt5.QtCore import QPointF, QRectF
from PyQt5.QtWidgets import QGraphicsItem
from gui.graphic_items import *
class MegaModel(QtCore.QAbstractItemModel):
def __init__(self, parent=None):
super().__init__(parent)
self._root_item = 7.40
pass
def columnCount(self, parent_index):
if parent_index.isValid():
return 0
else:
return 2
def rowCount(self, parent_index):
if parent_index.isValid():
return 0
else:
return 3
def data(self, index, role):
if index.isValid():
return QtCore.QVariant("Oy vey!")
else:
return None
def index(self, row, column, parent=QtCore.QModelIndex()):
print("index", row, column, parent)
if parent.isValid():
print("valid")
return parent.internalPointer()
else:
print("invalid")
return self.createIndex(row, column, self._root_item)
def parent(self, index):
return QtCore.QModelIndex()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
mega_view = QtWidgets.QTreeView()
mega_model = MegaModel()
mega_view.setModel(mega_model)
mega_view.show()
sys.exit(app.exec_())
【问题讨论】:
如果parent
索引有效,为什么要从index
方法返回parent.internalPointer()
?
好吧,我刚刚尝试将其修改为在parent
有效时返回QtCore.QModelndex()
。没有任何变化,没有出现所需的单元格...
还有第二个错误,看我的回答。
【参考方案1】:
两个错误:
-
您不应该从
index
方法返回 parent.internalPointer()
- 此方法不返回模型的存储值,它只返回模型项的索引
在data
方法中,您为所有角色返回QtCore.QVariant("Oy vey!")
。你真的应该只为QtCore.Qt.DisplayRole
返回这个,对于其他角色可以返回None
:
def data(self, index, role):
if not index.isValid():
return None
if role == QtCore.Qt.DisplayRole:
return index.internalPointer()
else:
return None
【讨论】:
谢谢同志!就是这样! // Добра тебе, умный человек! ^_^ 另外,你不能看看这个吗? ***.com/questions/42565139/… UPD:已经修复,tree.siblings() 只给出了一个节点的兄弟姐妹(节点本身没有列出)。以上是关于QTreeView 的 QAbstractItemModel:我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章