【发布时间】:2014-09-17 18:33:35
【问题描述】:
因为看起来没有专门为 QTreeView “设计”的“专用”抽象模型(对于 QListView 有 QAbstractListModel,对于 QTableView 有 QAbstractTableModel),因为我需要能够显示标题我选择使用 Table 的抽象模型:QAbstractTableModel 和 'QTreeView'。代码运行良好,但如果单击加号,它会立即崩溃。 QAbstractTableModel 不应该与“QTreeView”一起使用吗?使用什么抽象模型?
import os,sys
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)
elements={'Animals':{1:'Bison',2:'Panther',3:'Elephant'},'Birds':{1:'Duck',2:'Hawk',3:'Pigeon'},'Fish':{1:'Shark',2:'Salmon',3:'Piranha'}}
class Model(QtCore.QAbstractTableModel):
def __init__(self):
QtCore.QAbstractListModel.__init__(self)
self.items=[]
self.modelDict={}
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.items)
def columnCount(self, index=QtCore.QModelIndex()):
return 3
def data(self, index, role):
if not index.isValid() or not (0<=index.row()<len(self.items)): return QtCore.QVariant()
if role==QtCore.Qt.DisplayRole: return QtCore.QVariant(self.items[index.row()])
def buildItems(self):
totalItems=self.rowCount()
for key in self.modelDict:
self.beginInsertRows(QtCore.QModelIndex(), totalItems+1, 0)
self.items.append(key)
self.endInsertRows()
class TreeView(QtGui.QTreeView):
def __init__(self):
super(TreeView, self).__init__()
self.model= Model()
self.model.modelDict=elements
self.model.buildItems()
self.setModel(self.model)
self.show()
window=TreeView()
sys.exit(app.exec_())
【问题讨论】: