Stesso problema esatto come questo (?): Connecting QTableView selectionChanged signal produces segfault with PyQtPySide: Segfault quando si utilizza QItemSelectionModel con QListView
Ho un QListView, e voglio chiamare una funzione quando si seleziona 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)
Ma quando raggiunge l'ultima riga, dove sto usando il modello di selezione, l'app si blocca. Non con un traceback, ma con un "appname ha smesso di funzionare" da Windows. Sono abbastanza sicuro che sia un segfault.
MA, quando uso PyQt4 funziona correttamente. Sto usando PySide perché è LGPL.
Sì, sono sulle ultime versioni di tutto (PySide: 1.2.1, Python 2.7.5, Qt 4.8.5).
Qualcuno può aiutarmi con questo?
questo ha funzionato anche per me. (Ho usato self.server_list_selection_model nell'ultima riga invece di self.server_list.selectionModel()). Ma perché funziona e il codice nella domanda non funziona? –
Hai ragione, dovrebbe essere self.server_list_selectionModel nell'ultima riga. Lo correggerò. Non riesco a capirlo da solo, ma il problema è causato dall'implementazione della raccolta dei rifiuti conteggio di riferimento di qt che interagisce (o meglio non interagisce) con i collegamenti di campagna. – Valakyr
Se non si desidera mantenere un riferimento al modello di selezione, è possibile utilizzare la sintassi del cablaggio del segnale vecchio stile: 'QtCore.QObject.connect (self.server_list.selectionModel(), QtCore.SIGNAL (" currentChanged (QModelIndex, QModelIndex) "), self.server_changed)'. Non so se ci sono trappole quando si mantiene il modello di selezione. Ma preferisco scrivere 'selectionChanged.connect (self.server_changed)', come lo fai anche tu. –