2012-05-19 14 views
6

Dove devo usare un blocco tranne per registrare eccezioni di QApplication?Come registrare le eccezioni uncatched di QApplication?

Questo non sembra funzionare:

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

come l'eccezione non sarà nemmeno raggiungere quel blocco.

risposta

5

L'eccezione di lancio da un gestore eventi non è supportata in Qt. È necessario reimplementare QApplication :: notify() e rilevare tutte le eccezioni presenti.

Sovrascrive la funzione bool QApplication :: notify (ricevitore QObject *, evento QEvent *) in modo che rilevi tutte le eccezioni generate.

È possibile implementare in questo modo.

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

Questo dovrebbe essere utile: http://qt-project.org/doc/qt-4.8/exceptionsafety.html –

+0

Non funzionerebbe in quanto QApplication.notify rileva le eccezioni C++ e ho bisogno di rilevare le eccezioni python. – iTayb

+0

Come posso farlo? Voglio dire, dovrei tradurre questo codice in Python o creare un file C++ e farlo importarlo da python? Sono perso, dal momento che questo codice è C++ e stiamo parlando di Python. –

Problemi correlati