PySide: Segfault (?) Cuando se usa QItemSelectionModel con QListView

El mismo problema exacto que este: la conexión de la señal QTableView selectionChanged produce segfault con PyQt

Tengo un QListView y quiero llamar a una función cuando se selecciona un elemento:

self.server_list = QtGui.QListView(self.main_widget) self.server_list_model = QtGui.QStandardItemModel() self.server_list.setModel(self.server_list_model) self.server_list.selectionModel().selectionChanged.connect(self.server_changed) 

Pero, cuando llega a la última línea, donde estoy usando el modelo de selección, la aplicación falla. No con un rastreo, pero con un “appname ha dejado de funcionar” desde Windows. Estoy bastante seguro de que eso es una falta de seguridad.

PERO, cuando uso PyQt4 funciona bien. Estoy usando PySide porque es LGPL.

Sí, estoy en las últimas versiones de todo (PySide: 1.2.1, Python 2.7.5, Qt 4.8.5).

    Puede alguien ayudarme con esto?

    Intente mantener una referencia al modelo de selección durante la vida útil del modelo de selección. Eso me funcionó con un problema similar (falla de Seg al conectar con el evento currentChanged en un modelo de selección de vistas de tabla).

     self.server_list = QtGui.QListView(self.main_widget) self.server_list_model = QtGui.QStandardItemModel() self.server_list.setModel(self.server_list_model) self.server_list_selection_model = self.server_list.selectionModel() # workaround self.server_list_selection_model.selectionChanged.connect(self.server_changed) 

    Por alguna razón, las dos últimas líneas funcionan, mientras que combinarlas en un solo comando genera un error.

    El mismo problema aquí: http://permalink.gmane.org/gmane.comp.lib.qt.pyside.devel/541

    Y también respondí: http://permalink.gmane.org/gmane.comp.lib.qt.pyside.devel/542

    Sospecho que lo que pasa es:

     self.server_list # local object .selectionModel() # call C++ method, wraps C++ object in Python object .selectionChanged # get property of object # selection model is now out of scope and gets garbage collected .connect(...) # OOPS! ...operating on object that no longer exists!