[PyQt] Re: memory corruption storing python objects in a
QModelIndex with createIndex
Erick Tryzelaar
idadesub at users.sourceforge.net
Wed Oct 1 04:55:17 BST 2008
On Tue, Sep 30, 2008 at 8:04 PM, Erick Tryzelaar
<idadesub at users.sourceforge.net> wrote:
> Could this possibly be the source of my trouble?
It doesn't appear to be. I modified it to use internalId and a global
variable and it still segfaults. I've reduced this down as much as I
can, does anyone have any idea why this keeps crashing?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Node:
def __init__(self, parent):
self.parent = parent
self.children = {}
def child(self, row):
try:
return self.children[row]
except KeyError:
node = self.children[row] = Node(self)
return node
class Model(QAbstractItemModel):
def __init__(self, parent=None):
QAbstractItemModel.__init__(self, parent)
self.root = Node(None)
def rowCount(self, parent=QModelIndex()):
return 1
def columnCount(self, parent=QModelIndex()):
return 1
def hasChildren(self, index):
return True
def parent(self, index):
if not index.isValid():
return QModelIndex()
parentNode = index.internalPointer().parent
if not parentNode:
return QModelIndex()
return self.createIndex(0, 0, parentNode)
def index(self, row, column, parent=QModelIndex()):
if column != 0:
return QModelIndex()
if parent.isValid():
parentNode = parent.internalPointer()
else:
parentNode = self.root
return self.createIndex(row, column, parentNode.child(row))
def data(self, index, role=Qt.DisplayRole):
if not index.isValid() or role != Qt.DisplayRole:
return QVariant()
return QVariant('a')
def main():
app = QApplication(sys.argv)
model = Model()
window = QTreeView()
window.setModel(model)
window.resize(QSize(600, 300))
window.show()
sys.exit(app.exec_())
main()
More information about the PyQt
mailing list