2016-12-29 2 views
0

Я использую Qt 4.8. Есть ли способ иметь глобальный блок try и catch для всего проекта. Например, если мое приложение имеет два файла .cpp. Возможно ли исключить исключение из обоих файлов .cpp?global try and catch block in qt

ответ

0

Вы можете поместить в скобки все содержимое вашей main() функции следующим образом ::

int main(int argc, char *argv[]) 
{ 
    int ret = 0; 

    try  
    { 
     QApplication a(argc, argv); 

     QWidget w; 
     w.show(); 

     ret = a.exec(); 
    } 
    catch(...) 
    { 
     /* ... */ 
    } 

    return ret; 
} 

Смотри также: std::set_terminate()

1

Прежде всего, имейте в виду, что Qt не играть хорошо с исключениями , Он был разработан еще в те дни, когда исключения были довольно неясной особенностью C++, поэтому использование исключений обычно не считалось хорошей практикой для целого ряда связанных с реализацией причин.

Также имейте в виду, что, как в Qt 5.7 безопасность исключение не функционален, как официальный doc в настоящее время говорит:

Предварительное предупреждение: безопасность Исключение не функционален! Обычные случаи должны работать, но классы могут все еще течь или даже сбой.

Если вы используете соединения сигнального слота в своих классах, лучше всего обрабатывать исключения внутри слотов, которые могут их выбрасывать. Начиная с Qt 5.7, это не так: considered неопределенное поведение.

Если вы просто хотите, чтобы сделать некоторые очистки и/или регистрации ошибок на любом иногда неперехваченного исключения, вы можете обернуть весь main() содержимое в Try/поймать блок, как следует из ответа на предыдущий вопрос или в качестве альтернативы вы можете wrap the Qt's main event loop в такой блок :

QApplication app(argc, argv); 
... 
try { 
    app.exec(); 
} 
catch (const std::exception &) { 
    // clean up here, e.g. save the session 
    // and close all config files. 

    return 0; // exit the application 
}