2017-03-02 84 views
0

我想創建一個子類QAbstractItemModel以在QTreeView中使用它。起初,我決定製作一個沒有任何層次支持的簡約模型。它應該提供一個2×3的表格和簡單的文本數據(只讀一個)。用於QTreeView的QAbstractItemModel:我做錯了什麼?

唉,它不會崩潰,但不會顯示任何數據:只有少數列標題(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_()) 
+0

你爲什麼從'index'方法返回'parent.internalPointer()''如果指數parent'是有效? – Dmitry

+0

那麼,我只是試圖修改這個''parent'有效時返回'QtCore.QModelndex()'。沒有變化,所需的細胞不會出現... – Felix

+0

還有第二個錯誤,請參閱我的答案。 – Dmitry

回答

1

兩個錯誤:

  1. 你不應該從index方法返回parent.internalPointer() - 這種方法不返回模型的存儲值,是指只返回索引模型項目
  2. data方法中,您爲所有角色返回QtCore.QVariant("Oy vey!")。你真的應該只返回此爲QtCore.Qt.DisplayRole,其他角色就OK返回None

    def data(self, index, role): 
        if not index.isValid(): 
         return None 
        if role == QtCore.Qt.DisplayRole: 
         return index.internalPointer() 
        else: 
         return None 
    
+0

謝謝同志們!而已! //Добратебе,умныйчеловек!^_^ – Felix

+0

另外,你不能看看這個嗎? http://stackoverflow.com/questions/42565139/qabstractitemmodel-annoying-branch-line-in-qtreeview – Felix

+0

UPD:已經修復,tree.siblings()只給了一個節點的兄弟姐妹(節點本身沒有列出) 。 – Felix