[PyQt] Segfault when activating items in a view, more info
peter at lohmanders.se
peter at lohmanders.se
Mon Aug 9 08:42:05 BST 2010
Yes, the connect signal had the wrong signature, but that doesn't matter.
I do not get a warning when trying to connect invalid signals, but
even if I have no activated-signal connected, the darn thing still segfaults
when I double click any cell.
On 2010-08-09 (Mon) 09:09, peter at lohmanders.se wrote:
> Hello!
>
> No matter how I implement my own item models, they segfault when ever they
> are used with a view and an item is activated.
>
> Example minimalistic model I test with:
>
> import sys
> from PyQt4 import QtGui, QtCore
>
> class TestModel(QtCore.QAbstractTableModel):
>
> def headerData(self, section, orientation, role =
> QtCore.Qt.DisplayRole):
> return QtCore.QVariant("a")
>
> def data(self, index, role = QtCore.Qt.DisplayRole):
> if role == QtCore.Qt.DisplayRole:
> return QtCore.QVariant("t")
> return QtCore.QVariant()
>
> def columnCount(self, index):
> return 2
>
> def rowCount(self, index):
> return 2
>
>
> def onActivated():
> print "activated"
>
> if __name__ == "__main__":
> app = QtGui.QApplication([])
> win = QtGui.QMainWindow()
> model = TestModel()
> view = QtGui.QTreeView()
> view.setModel(model)
> app.connect(view, QtCore.SIGNAL("activated("")"),
> onActivated)
> view.setRootIsDecorated(False)
> win.setCentralWidget(view)
> win.show()
> app.exec_()
>
>
>
> To reproduce the segfault I set the model for a table or tree view and just
> double click one of the 4 empty cells. If the item is editable the editor
> appears and nothing happens. If the item is not editable and is activated
> there's a delay of 0.5-1.0 seconds before a segfault pops up.
>
> I get no warnings and no errors from PyQt or Python and I don't have the
> debug versions available, but here's the bt from gdb anyway:
>
> #0 0x00007ffff7abab7f in PyDict_GetItem () from
> /usr/lib/libpython2.6.so.1.0
> #1 0x00007ffff7aa9d10 in PyFrame_New () from /usr/lib/libpython2.6.so.1.0
> #2 0x00007ffff7b16c97 in PyEval_EvalCodeEx () from
> /usr/lib/libpython2.6.so.1.0
> #3 0x00007ffff7aaa9cf in function_call () from /usr/lib/libpython2.6.so.1.0
> #4 0x00007ffff7a83893 in PyObject_Call () from /usr/lib/libpython2.6.so.1.0
> #5 0x00007ffff7a9644f in instancemethod_call () from
> /usr/lib/libpython2.6.so.1.0
> #6 0x00007ffff7a83893 in PyObject_Call () from /usr/lib/libpython2.6.so.1.0
> #7 0x00007ffff7b0fb43 in PyEval_CallObjectWithKeywords () from
> /usr/lib/libpython2.6.so.1.0
> #8 0x00007ffff425413b in ?? () from /usr/lib/python2.6/site-packages/sip.so
> #9 0x00007ffff59bad94 in ?? () from
> /usr/lib/python2.6/site-packages/PyQt4/QtCore.so
> #10 0x00007ffff5a99460 in ?? () from
> /usr/lib/python2.6/site-packages/PyQt4/QtCore.so
> #11 0x00007ffff560a3bd in QAbstractTableModel::hasChildren(QModelIndex
> const&) const () from /usr/lib/libQtCore.so.4
> #12 0x00007ffff336d977 in ?? () from /usr/lib/libQtGui.so.4
>
>
> Obviously, no matter how bad you write your models PyQt shouldn't segfault.
> I use version 4.7.4-2 on a 64-bit Linux system (Archlinux), but it also
> segfaults with 4.4.4-6 on a Debian system.
>
> This is a new problem, I have many models in other applications that work
> fine, I have no idea why this is happening, any help is appreciated.
>
> /Peter
> _______________________________________________
> PyQt mailing list PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt
More information about the PyQt
mailing list