我使用PySide库在python中编写了一个Qt应用程序。当我关闭它时,我得到分段错误(核心转储)
使用gdb进行回溯:
(gdb) backtrace
#0 0x00007ffff5d19c40 in QObject::staticMetaObject () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#1 0x00007ffff64c4bce in PySide::SignalManager::clear() () from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2
#2 0x00007ffff64d1f95 in PySide::destroyQCoreApplication() () from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2
#3 0x00007ffff64d2981 in PySide::runCleanupFunctions() () from /usr/lib/x86_64-linux-gnu/libpyside-python2.7.so.1.2
#4 0x00007ffff683ecc5 in ?? () from /usr/lib/python2.7/dist-packages/PySide/QtCore.so
#5 0x000000000052f936 in PyEval_EvalFrameEx ()
#6 0x000000000056d0aa in ?? ()
#7 0x00000000004da29f in PyEval_CallObjectWithKeywords ()
#8 0x000000000042fa19 in Py_Finalize ()
#9 0x000000000042fb7c in Py_Exit ()
#10 0x000000000042fcb9 in ?? ()
#11 0x000000000042ec32 in PyErr_PrintEx ()
#12 0x000000000042f042 in ?? ()
#13 0x000000000046aa09 in Py_Main ()
#14 0x00007ffff7817ec5 in __libc_start_main (main=0x46ac3f <main>, argc=2, argv=0x7fffffffdf58, init=<optimized out>, fini=<optimized out>,
rtld_fini=<optimized out>, stack_end=0x7fffffffdf48) at libc-start.c:287
#15 0x000000000057497e in _start ()
版本:
QMake version 3.0
Using Qt version 5.2.1 in /usr/lib/x86_64-linux-gnu
Python 2.7.6
Ubuntu 14.04
我如何解决这个问题?
答案 0 :(得分:0)
如果这个问题仍然是最新的,我有同样的问题,今天就解决了。 在我的情况下,通过调用
是一个问题destroy()
直接使用我的小部件的方法。 由于我打开了一些线程,它遇到了一个段错误。 正如我现在所读到的,发出近似事件是一种更好的做法。
我现在也覆盖了closeEvt()方法,并在关闭应用程序之前检查是否有要做的事情
##
# Closes the application
# ...
def closeEvent(self, event):
if self.canClose() # Exit the application
event.accept()
logging.debug("Closed App clean")
else:
# Do stuff to close the application cleanly
if canCloseNow:
event.accept()
else:
# Give user feedbackstuff like opening a save dialog
# or some other stuff...
event.ignore()
我知道很可能有更优雅的程序来做到这一点,但对我来说它运作得很好......