2009-10-16 16 views
12

Właściwie rozumiem główne za i przeciw używania wyjątków. Używam ich w moich projektach domyślnie jako strategii obsługi błędów. Ale teraz rozpoczynam projekt Windows CE z biblioteką Qt i widzę, że twórcy Qt odmówili używania wyjątków w hierarchii klas.Qt i strategia obsługi błędów

Tak więc, jeśli używam wyjątków, będę musiał starannie przetłumaczyć je na kody błędów (lub niektóre obiekty lub po prostu przełknąć) na granicach moich/Qt code. W przeciwnym razie mogę odmówić używania wyjątków w moim kodzie i przejść do innej strategii.

Jaka byłaby najlepsza strategia obsługi błędów w moim przypadku - używać wyjątków lub używać kodów błędów, itp. ...? Czy masz doświadczenie w tworzeniu Qt i jakiej strategii obsługi błędów użyłeś?

Odpowiedz

0

Wyrzucanie wyjątków z obsługi zdarzeń nie jest obsługiwane w Qt. Unikaj tego i nie powinno być żadnych problemów z wyjątkami.

+0

Czy cheez mówi, że jest rzeczywiście obsługiwany? –

+0

Nie, nieobsługiwane. Tylko, że możesz ich używać na własne ryzyko. – cheez

7

Zastąpić QApplication :: notify() i obsłużyć tam wyjątki (a nie 100% wartości zwracanej). Możesz "wyrzucać" wyjątki z procedur obsługi sygnałów, ale w ten sposób nie są one propagowane do Qt.

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

Ta metoda pozwoli nam wyrzucać wyjątki z procedur obsługi zdarzeń. A co z automatami do gier (z bezpośrednim połączeniem i kolejkowanym połączeniem)? –

+0

Musisz przetestować ... – cheez

+0

To, co robiliśmy od Qt 4.0, działa ładnie! – Ringding

Powiązane problemy