2012-05-19 9 views
6

Wo soll ich einen Ausnahmeblock verwenden, um Ausnahmen von QApplication zu protokollieren?Wie protokolliert man unbelegte Ausnahmen einer QApplication?

Dies scheint nicht zu funktionieren:

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

als Ausnahme wird nicht einmal diesen Block erreichen.

Antwort

5

Das Auslösen von Ausnahmen von einem Ereignishandler wird in Qt nicht unterstützt. Sie müssen QApplication :: notify() neu implementieren und alle Ausnahmen abfangen.

Überschreiben Sie die Funktion bool QApplication :: notify (QObject * receiver, QEvent * event), damit alle ausgelösten Ausnahmen abgefangen werden.

Sie können so implementieren.

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

Dies sollte hilfreich sein: http://qt-project.org/doc/qt-4.8/exceptionsafety.html –

+0

Das würde nicht funktionieren, da QApplication.notify C++ - Ausnahmen abfängt und ich Python-Ausnahmen abfangen muss. – iTayb

+0

Wie kann ich es tun? Ich meine, sollte ich diesen Code in Python übersetzen oder eine C++ - Datei erstellen und python importieren lassen? Ich bin verloren, da dieser Code C++ ist und wir sprechen über Python. –

Verwandte Themen