2009-10-16 22 views
12

En realidad, entiendo los pros y los contras de usar excepciones. Y los utilizo en mis proyectos por defecto como estrategia de manejo de errores. Pero ahora estoy comenzando un proyecto de Windows CE con la biblioteca Qt, y veo que los creadores de Qt se negaron a usar excepciones en la jerarquía de clases.Qt y estrategia de manejo de errores

Por lo tanto, si utilizo excepciones, tendré que traducirlas cuidadosamente a códigos de error (o algunos objetos, o simplemente tragar) desde y hacia mis límites de código Qt. De lo contrario, puedo negarme a usar excepciones en mi código y cambiar a alguna otra estrategia.

¿Cuál sería la mejor estrategia de manejo de errores en mi caso: usar excepciones o usar códigos de error, etc.? ¿Tiene experiencia con el desarrollo de Qt y qué estrategia de manejo de errores usó?

Respuesta

0

Lanzar excepciones de un controlador de eventos no es compatible con Qt. Evita eso, y no debería haber ningún problema con las excepciones.

+0

¿Dice que en realidad es compatible? –

+0

No, no es compatible. Solo que puede usarlos bajo su propio riesgo. – cheez

7

Anula QApplication :: notify() y maneja excepciones allí (no 100% en el valor devuelto). Puedes "lanzar" excepciones de los manejadores de señal, pero no se propagan a Qt de esta manera.

bool 
notify(QObject * rec, QEvent * ev) 
{ 
    try 
    { 
    return QApplication::notify(rec,ev); 
    } 
    catch(my::Exception & e) 
    { 
    QMessageBox::warning(0, 
         tr("An error occurred"), 
         e.message()); 
    } 
    catch(...) 
    { 
    QMessageBox::warning(0, 
         tr("An unexpected error occurred"), 
         tr("This is likely a bug.")); 
    } 
    return false; 
+0

Por lo tanto, este método nos permitirá lanzar excepciones desde los controladores de eventos. Pero, ¿qué pasa con las máquinas tragamonedas (con conexión directa y conexión en cola)? –

+0

Tendrás que probar ... – cheez

+0

¡Eso es lo que hemos estado haciendo desde Qt 4.0, funciona muy bien! – Ringding