Hello all,
I'm having a hard time getting a QTreeView widget to work with my own
model. I've tried translating the "Simple Tree Model Example" from the
Qt docs, but it still doesn't work. Does anyone have working example
code for a QAbstractItemModel, or know what is going wrong?
Tested on PyQt 4.3 + Qt 4.3.2, and kde's qt-copy (pre Qt 4.4-ish) with
4.3-snapshot-20070905. Some of the methods get called (I've left the
debug in), but nothing is displayed.
thanks,
--
Simon Edwards | KDE-NL, Guidance tools, Guarddog Firewall
[EMAIL PROTECTED] | http://www.simonzone.com/software/
Nijmegen, The Netherlands | "ZooTV? You made the right choice."
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(QtCore.QSize(QtCore.QRect(0,0,400,300).size()).expandedTo(Dialog.minimumSizeHint()))
self.vboxlayout = QtGui.QVBoxLayout(Dialog)
self.vboxlayout.setObjectName("vboxlayout")
self.treeView = QtGui.QTreeView(Dialog)
self.treeView.setObjectName("treeView")
self.vboxlayout.addWidget(self.treeView)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
class TreeItem(object):
def __init__(self,data,parent=None):
self.parentItem = parent
self.itemData = data
self.childItems = []
def appendChild(self, item):
self.childItems.append(item)
def child(self,row):
return self.childItems[row]
def childCount(self):
return len(self.childItems)
def columnCount(self):
return len(self.itemData)
def data(self,column):
return self.itemData[column]
def parent(self):
return self.parentItem
def row(self):
if self.parentItem is not None:
return self.parentItem.childItems.index(self)
return 0
class TreeModel(QtCore.QAbstractItemModel):
def __init__(self,parent=None):
QtCore.QAbstractItemModel.__init__(self,parent)
self.rootData = []
self.rootItem = TreeItem(self.rootData)
self.setupModelData(self.rootItem)
def columnCount(self, parent=QtCore.QModelIndex()):
print("columnCount")
if parent.isValid():
return parent.internalPointer().columnCount()
else:
return self.rootItem.columnCount()
def data(self, index, role):
print("data")
if not self.index.isValid():
return QtCore.QVariant()
if role != Qt.DisplayRole:
return QtCore.QVariant()
item = index.internalPointer()
return item.data(index.column())
def flags(self, index):
print("flags")
if not index.isValid():
return 0
return QtCore.Qt.ItemFlags(QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable)
def headerData(self, section, orientation, role):
print("headerData")
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self.rootItem.data(section)
return QtCore.QVariant()
def index(self, row, column, parent):
print("index")
if not self.hasIndex(row, column, parent):
return QtCore.QModelIndex()
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
childItem = parentItem.child(row)
if childItem is not None:
return self.createIndex(row, column, childItem)
else:
return QtCore.QModelIndex()
def parent(self, index):
print("parent")
if not index.isValid():
return QtCore.QModelIndex()
childItem = index.internalPointer()
parentItem = childItem.parent()
if parentItem is rootItem:
return QtCore.QModelIndex()
return self.createIndex(parentItem.row(), 0, parentItem)
def rowCount(self, parent):
print("rowCount")
if parent.column() > 0:
return 0
if not parent.isValid():
parentItem = self.rootItem
else:
parentItem = parent.internalPointer()
return parentItem.childCount()
def setupModelData(self, parent):
x1 = TreeItem(['one','two'],parent)
TreeItem(['x','x2'],x1)
TreeItem(['three','four'],parent)
if __name__ == "__main__":
import sys
global app,model
app = QtGui.QApplication(sys.argv)
view = QtGui.QTreeView()
model = TreeModel()
view.setModel(model)
view.setWindowTitle("Simple Tree Model")
view.show()
sys.exit(app.exec_())
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt