9

与此相同的问题:连接 QTableView selectionChanged 信号会使用 PyQt 产生段错误

我有一个 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 的“应用程序名称已停止工作”。我很确定这是一个段错误。

但是,当我使用 PyQt4 时,它工作正常。我使用 PySide 因为它是 LGPL。

是的,我使用的是最新版本(PySide:1.2.1、Python 2.7.5、Qt 4.8.5)。

谁能帮我这个?

4

2 回答 2

14

尝试在选择模型的生命周期中保留对选择模型的引用。这对我有类似的问题(连接到表视图选择模型上的 currentChanged 事件时出现段错误)。

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)

出于某种原因,最后两行有效,而将它们组合成一个命令会引发错误。

于 2014-01-17T23:08:43.347 回答
3

同样的问题:http: //permalink.gmane.org/gmane.comp.lib.qt.pyside.devel/541

我也回答了:http: //permalink.gmane.org/gmane.comp.lib.qt.pyside.devel/542

我怀疑会发生什么:

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!
于 2015-11-20T15:44:29.007 回答