같은 정확한 문제 QItemSelectionModel를 사용하여 (?) : Connecting QTableView selectionChanged signal produces segfault with PyQtPySide : segfault의 QListView이 같은
은 내가 QListView 있고, 항목이 선택되었을 때 나는 함수를 호출 할 :
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)
그러나 선택 모델을 사용중인 마지막 행에 도달하면 앱이 다운됩니다. 역 추적이 아니라 Windows에서 "appname has working working"이 (가) 중지되었습니다. 나는 그게 segfault라고 확신한다.
하지만 PyQt4를 사용할 때 정상적으로 작동합니다. LGPL이므로 PySide를 사용하고 있습니다.
예, 저는 모든 최신 버전입니다 (PySide : 1.2.1, Python 2.7.5, Qt 4.8.5).
아무도 도와 줄 수 있습니까?
이 너무 나를 위해 일했다. (self.server_list.selectionModel() 대신 마지막 줄에 self.server_list_selection_model을 사용했습니다.)하지만이 코드가 작동하지 않고 질문의 코드가 작동하지 않는 이유는 무엇입니까? –
맞습니다. 마지막 행의 self.server_list_selectionModel이어야합니다. 나는 그것을 바로 잡을 것이다. 직접 이해할 수는 없지만 문제는 pyside 바인딩과 상호 작용하는 (또는 오히려 상호 작용하지 않는) qt의 참조 카운팅 가비지 콜렉션 구현에 의해 발생합니다. – Valakyr
선택 모델에 대한 참조를 유지하고 싶지 않다면 구식 신호 배선 구문을 사용할 수 있습니다 :'QtCore.QObject.connect (self.server_list.selectionModel(), QtCore.SIGNAL ("currentChanged (QModelIndex, QModelIndex) "), self.server_changed)'를 사용하십시오. 선택 모델을 유지할 때 트랩이 있는지 알 수 없습니다. 하지만 당신이하는 것처럼'selectionChanged.connect (self.server_changed)'를 쓰는 것을 선호한다. –