QTREEVIEW的QABTRACTITEMMODEL:我做错了什么



我想创建一个子类QAbstractItemModel以在QTreeView中使用它。起初,我决定在没有任何层次结构的情况下制作一个简约的模型。它应该给出一个2 x-3的表格,其中包含简单的文本数据(只读一个)。

a,它不会崩溃,但没有显示任何数据:只有少数列标题(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_())

两个错误:

  1. 您不应该从index方法返回parent.internalPointer()-此方法不返回模型的存储值,而是仅将索引返回模型项目
  2. 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
    

相关内容

  • 没有找到相关文章

最新更新