2009-10-16 1 views
12

En fait, je comprends les avantages et les inconvénients majeurs de l'utilisation des exceptions. Et je les utilise par défaut dans mes projets comme stratégie de gestion des erreurs. Mais maintenant je commence un projet Windows CE avec la bibliothèque Qt, et je vois que les créateurs Qt ont refusé d'utiliser des exceptions dans la hiérarchie des classes. Donc, si j'utilise des exceptions, je devrai les traduire avec précaution vers et depuis les codes d'erreur (ou certains objets, ou juste avaler) sur mes limites de code/Qt. Sinon, je peux refuser d'utiliser des exceptions dans mon code et passer à une autre stratégie.Qt et la stratégie de gestion des erreurs

Quelle serait la meilleure stratégie de gestion des erreurs dans mon cas - utiliser des exceptions ou utiliser des codes d'erreur, ou etc ...? Avez-vous l'expérience du développement Qt et quelle stratégie de gestion des erreurs avez-vous utilisée?

Répondre

0

La levée d'exceptions à partir d'un gestionnaire d'événements n'est pas prise en charge dans Qt. Évitez cela, et il ne devrait pas y avoir de problème avec les exceptions.

+0

Est-ce que cheez dit qu'il est réellement supporté? –

+0

Non, non pris en charge. Juste que vous pouvez les utiliser à vos risques et périls. – cheez

7

Remplacer QApplication :: notify() et gérer les exceptions (pas 100% sur la valeur de retour). Vous pouvez "jeter" des exceptions à partir des gestionnaires de signaux, mais ils ne sont pas propagés à Qt de cette manière.

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

Donc, cette méthode nous permettra de lancer des exceptions à partir des gestionnaires d'événements. Mais qu'en est-il des slots (avec connexion directe et connexion en file d'attente)? –

+0

Vous devrez tester ... – cheez

+0

C'est ce que nous faisons depuis Qt 4.0, ça marche bien! – Ringding