Tried with Qt 4.3, Qt 4.4, PyQt 4.3.3, PyQt 4.4. I think it has
something to do with my parent implementation. It starts ok but if you
try to open the tree it segfaults right away.
#!/bin/env python
import sys
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import SIGNAL
EMPTY_VARIANT = QtCore.QVariant()
EMPTY_INDEX = QtCore.QModelIndex()
class Item:
def __init__(self,name,parent=None):
self._children = []
self.name = name
self.parent = parent
def children(self):
return self._children
root = Item("root")
for i in range(1,10):
root._children.append(Item("item%d" % i,root))
child = root._children[0]
for i in range(1,3):
child._children.append(Item("citem%d" % i,child))
class SimpleTreeModel(QtCore.QAbstractItemModel):
def __init__(self, parent=None):
QtCore.QAbstractItemModel.__init__(self, parent)
self.elements = root
def data(self, index, role):
if not index.isValid():
return EMPTY_VARIANT
e = index.internalPointer()
if role == 0:
return QtCore.QVariant(e.name)
return EMPTY_VARIANT
def index(self, row, column, parent):
if parent.isValid():
item = parent.internalPointer()
else:
item = self.elements
return self.createIndex(row, column, item.children()[row])
def parent(self, index):
if not index.isValid():
return EMPTY_INDEX
item = index.internalPointer()
if not item.parent:
return EMPTY_INDEX
pp = item.parent.parent
if not pp:
c = self.elements.children()
else:
c = pp.children()
try:
i = c.index(item.parent)
except ValueError:
i = 0
return self.createIndex(i,0,item.parent)
def rowCount(self, parent):
if parent.isValid():
item = parent.internalPointer()
return len(item.children())
else:
print len(self.elements.children())
return len(self.elements.children())
def columnCount(self, parent):
return 1
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
view = QtGui.QTreeView()
model = SimpleTreeModel(view)
view.setModel(model)
view.show()
app.exec_()
--
-Matt
<http://twiki.spimageworks.com/twiki/bin/view/Software/CueDevelopment>
<http://twiki.spimageworks.com/twiki/bin/view/Software/MiddleTier>
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt