如何记录未捕获的QApplication异常?

iTa*_*ayb 6 qt4 pyqt4

我应该在哪里使用except块来记录a的异常QApplication

这似乎不起作用:

app = QtGui.QApplication(sys.argv)
MainWindow = MainWindow()
MainWindow.show()
try:
    eventLoop = app.exec_()
except Exception, e:
    log.exception(str(e))
Run Code Online (Sandbox Code Playgroud)

因为例外甚至不会到达那个街区.

Sca*_*ode 5

Qt不支持从事件处理程序中抛出异常.您必须重新实现QApplication :: notify()并捕获所有异常.

覆盖函数bool QApplication :: notify(QObject*receiver,QEvent*event),以便捕获所有抛出的异常.

你可以像这样实现.

virtual bool notify(QObject * receiver, QEvent * event) 
{
     try 
     {
     return QApplication::notify(receiver, event);
     } 
     catch(std::exception& e) 
     {
      qDebug() << "Exception thrown:" << e.what();
     }
}
Run Code Online (Sandbox Code Playgroud)


iTa*_*ayb 0

我通过覆盖解决了这个问题excepthook,如以下答案所示:Logging All Exceptions in a pyqt4 app