当我关闭应用程序时,以下示例代码因此错误而崩溃:
QBasicTimer::start: QBasicTimer can only be used with threads started with QThread
这是我的代码:
import sys
from PyQt4 import QtGui ,QtCore
app = QtGui.QApplication(sys.argv)
data=[]
data.append("one")
model=QtGui.QStringListModel(data)
combobox=QtGui.QComboBox()
combobox.show()
combobox.setModel(model)
sys.exit(app.exec_())
我发现这是关于使用模型的,但我不知道如何修复它。
编辑:
操作系统:win 7 64位
pyqt4
该程序并没有“崩溃”:它只是在正常关闭过程中打印一条错误消息。
显示该消息的原因是垃圾收集的副作用。当 python 关闭时,对象被删除的顺序可能是不可预测的。这可能会导致 C++ 端的对象以“错误”的顺序被删除,因此当发生这种情况时,Qt 有时会抱怨。
“修复”示例代码的一种方法是简单地重命名一些 PyQt 对象。如果我改个名字combobox
to combo
,例如,错误消息消失。这没有什么神秘的——它只是改变了对象被删除的顺序。
但解决问题的另一种更可靠的方法是确保QStringListModel
有一个父级,因为当它传递到组合框时,Qt 可能不会获得它的所有权。当子对象以这种方式链接在一起时,Qt 应始终正确处理子对象的删除。所以代码示例将变为:
import sys
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication(sys.argv)
combobox = QtGui.QComboBox()
data = []
data.append("one")
model = QtGui.QStringListModel(data, combobox)
combobox.setModel(model)
combobox.show()
sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)