[PyQt] Unexpected segfault when using QSortFilterProxyModel with a QFileDialog

Dave Peterson dpeterson at enthought.com
Wed Oct 7 00:18:32 BST 2009


I must be doing something brain dead but I'm not sure what.   When I 
display a QFileDialog after having set a proxy model, I get a seg fault 
when the QFileDialog tries to save it's state.  Here's the top of the 
stacktrace -- perhaps there is enough info here for someone else to be 
able to tell where in the history() method something is going wrong?

Thread 0 Crashed:
0   QtGui                             0x02498e53 QFileDialog::history() 
const + 115
1   QtGui                             0x02499115 
QFileDialog::saveState() const + 229
2   QtGui                             0x024995f7 
QFileDialog::~QFileDialog() + 231
3   QtGui.so                          0x01a4f137 
sipQFileDialog::~sipQFileDialog() + 89


And here's how I'm adding the proxy to the QFileDialog.

    dlg = QtGui.QFileDialog(parent, title, default_directory)
    class MyFilterProxy(QtGui.QSortFilterProxyModel):
        def filterAcceptsRow(self, source_row, source_parent):
            logger.debug('MyFilterProxy: %s, %s' % (source_row, 
source_parent))
            return super(MyFilterProxy, 
self).filterAcceptsRow(source_row, source_parent)
    proxy = MyFilterProxy()
    proxy.dynamicSortFilter = True  # filter whenever the source data 
changes
    dlg.setProxyModel(proxy)


Is the problem that the QFileDialog is taking ownership of the proxy 
instance and thus having memory fights with Python somehow?  Or does 
PyQt properly handle that situation?   If not, what's the right way to 
create a proxy instance so that this ownership over memory doesn't happen?


-- Dave



More information about the PyQt mailing list