<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body bgcolor="#ffffff" text="#000000">
Tried with Qt 4.3, Qt 4.4, PyQt 4.3.3, PyQt 4.4.&nbsp; I think it has
something to do with my parent implementation.&nbsp; It starts ok but if you
try to open the tree it segfaults right away.<br>
<br>
#!/bin/env python<br>
import sys<br>
<br>
from PyQt4 import QtCore, QtGui<br>
from PyQt4.QtCore import SIGNAL<br>
<br>
EMPTY_VARIANT = QtCore.QVariant()<br>
EMPTY_INDEX = QtCore.QModelIndex()<br>
<br>
class Item:<br>
&nbsp;&nbsp;&nbsp; def __init__(self,name,parent=None):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self._children = []<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.name = name<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.parent = parent<br>
&nbsp;&nbsp;&nbsp; def children(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self._children<br>
<br>
root = Item("root")<br>
for i in range(1,10):<br>
&nbsp;&nbsp;&nbsp; root._children.append(Item("item%d" % i,root))<br>
<br>
child = root._children[0]<br>
for i in range(1,3):<br>
&nbsp;&nbsp;&nbsp; child._children.append(Item("citem%d" % i,child))<br>
<br>
class SimpleTreeModel(QtCore.QAbstractItemModel):<br>
&nbsp;&nbsp;&nbsp; def __init__(self, parent=None):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QtCore.QAbstractItemModel.__init__(self, parent)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.elements = root<br>
<br>
&nbsp;&nbsp;&nbsp; def data(self, index, role):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not index.isValid():<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EMPTY_VARIANT<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e = index.internalPointer()<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if role == 0:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return QtCore.QVariant(e.name)<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EMPTY_VARIANT<br>
<br>
&nbsp;&nbsp;&nbsp; def index(self, row, column, parent):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if parent.isValid():<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = parent.internalPointer()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = self.elements<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self.createIndex(row, column, item.children()[row])<br>
<br>
&nbsp;&nbsp;&nbsp; def parent(self, index):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not index.isValid():<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EMPTY_INDEX<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = index.internalPointer()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not item.parent:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return EMPTY_INDEX<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pp = item.parent.parent<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if not pp:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = self.elements.children()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = pp.children()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = c.index(item.parent)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; except ValueError:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self.createIndex(i,0,item.parent)<br>
<br>
&nbsp;&nbsp;&nbsp; def rowCount(self, parent):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if parent.isValid():<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item = parent.internalPointer()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return len(item.children())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print len(self.elements.children())<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return len(self.elements.children())<br>
<br>
&nbsp;&nbsp;&nbsp; def columnCount(self, parent):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1<br>
<br>
<br>
if __name__ == "__main__":<br>
&nbsp;&nbsp;&nbsp; app = QtGui.QApplication(sys.argv)<br>
<br>
&nbsp;&nbsp;&nbsp; view = QtGui.QTreeView()<br>
&nbsp;&nbsp;&nbsp; model = SimpleTreeModel(view)<br>
&nbsp;&nbsp;&nbsp; view.setModel(model)<br>
&nbsp;&nbsp;&nbsp; view.show()<br>
&nbsp;&nbsp;&nbsp; app.exec_()<br>
<br>
<br>
<br>
<div class="moz-signature">-- <br>
-Matt<br>
<br>
<span style="font-size: 11px;"><a
 href="http://twiki.spimageworks.com/twiki/bin/view/Software/CueDevelopment"><br>
</a></span><span style="font-size: 11px;"><a
 href="http://twiki.spimageworks.com/twiki/bin/view/Software/MiddleTier"></a><span></span></span></div>
</body>
</html>