2009-10-16 6 views
12

На самом деле, я понимаю основные плюсы и минусы использования исключений. И я использую их в своих проектах по умолчанию в качестве стратегии обработки ошибок. Но теперь я начинаю проект Windows CE с библиотекой Qt, и я вижу, что разработчики Qt отказались использовать исключения в иерархии классов.Qt и стратегия обработки ошибок

Итак, если я использую исключения, мне нужно будет тщательно перевести их на коды ошибок (или некоторые объекты или просто проглотить) на мои/Qt-коды. В противном случае я могу отказаться использовать исключения в своем коде и перейти к другой стратегии.

Что было бы лучшей стратегией обработки ошибок в моем случае - использовать исключения или использовать коды ошибок или т. Д.?? Есть ли у вас опыт разработки Qt и какая стратегия обработки ошибок вы использовали?

ответ

0

Отбрасывание исключений из обработчика событий не поддерживается в Qt. Избегайте этого, и не должно быть никаких проблем с исключениями.

+0

Говорит ли чез, что это действительно поддерживается? –

+0

Нет, не поддерживается. Просто вы можете использовать их на свой страх и риск. – cheez

7

Переопределить QApplication :: notify() и обрабатывать исключения там (не 100% от возвращаемого значения). Вы можете «выбросить» исключения из обработчиков сигналов, но таким образом они не распространяются на 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

Итак, этот метод позволит нам исключать исключения из обработчиков событий. Но как насчет слотов (с прямым соединением и связью в очереди)? –

+0

Вам нужно будет проверить ... – cheez

+0

Это то, что мы делаем с Qt 4.0, прекрасно работает! – Ringding

Смежные вопросы