6

の例外をログに記録するには、どこで except ブロックを使用する必要がありQApplicationますか?

これはうまくいかないようです:

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

例外はそのブロックにさえ到達しないためです。

4

2 に答える 2

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();
     }
}
于 2012-05-19T18:38:50.433 に答える
0

excepthook次の回答に見られるように、 をオーバーライドして解決しました: Logging All Exceptions in a pyqt4 app

于 2012-05-20T21:25:45.763 に答える