2012-05-19 15 views
6

dónde debería utilizar un bloque de excepción con el fin de registrar excepciones de QApplication?¿Cómo registrar excepciones no detectadas de una aplicación Q?

no parece que esto funcione:

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

como la excepción incluso no llegar a ese bloque.

Respuesta

5

excepciones que lanzan desde un controlador de eventos no se admite en Qt. Debe volver a implementar QApplication :: notify() y detectar todas las excepciones allí.

sobrescribir el QApplication función bool :: Notify (* QObject receptor, caso QEvent *) de manera que captura todas las excepciones producidas.

que se pueden implementar como este.

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

Esto debería ser útil: http://qt-project.org/doc/qt-4.8/exceptionsafety.html –

+0

Eso no funcionaría como QApplication.notify atrapa las excepciones de C++, y necesito atrapar las excepciones de Python. – iTayb

+0

¿Cómo puedo hacerlo? Quiero decir, ¿debería traducir este código a Python o hacer un archivo C++ y hacer que python lo importe? Estoy perdido, ya que este código es C++ y estamos hablando de Python. –

Cuestiones relacionadas