2016-12-29 1 views
0

Qt 4.8을 사용 중입니다. 전체 프로젝트에서 글로벌 시도 및 차단 블록을 사용하는 방법이 있습니까? 내 응용 프로그램에 두 개의 .cpp 파일이있는 경우의 예입니다. 두 가지 .cpp 파일에서 예외를 catch 할 수 있습니까?qt에서 글로벌 try and catch 블록

답변

0

다음과 같이 :: 또한

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

    try  
    { 
     QApplication a(argc, argv); 

     QWidget w; 
     w.show(); 

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

    return ret; 
} 

참조 당신은 괄호에 main() 기능의 전체 내용을 넣을 수 있습니다 : 모든 std::set_terminate()

1

먼저, Qt는 예외 좋은 재생되지 않는 경고 . 예외가 C++의 다소 모호한 기능이었던 당시에는 예외를 사용하는 것이 일반적으로 구현과 관련된 여러 가지 이유로 우수 사례로 간주되지 않았던 시점에 다시 설계되었습니다. 또한

공식 doc 현재 이야기로 Qt는 5.7로 예외 안전성이 완료 기능이되지 않는다는 경고 :

예비 경고 : 예외 안전이 완료 기능이 아닙니다! 일반적인 경우는 효과가 있지만 클래스가 계속 누출되거나 충돌 할 수 있습니다.

클래스 내에서 신호 슬롯 연결을 사용하는 경우 슬롯 내부에서 예외를 처리하는 것이 가장 좋습니다. Qt 5.7부터는 정의되지 않은 동작 인 considered이 발생하지 않습니다. 당신은 그냥 가끔 캐치되지 않는 예외에 대한 몇 가지 정리 및/또는 오류 로깅을 수행 할 경우 이전의 대답에서 알 수 있듯이

, 당신은 try/catch 블록에 전체 main() 내용을 포장 할 수 있습니다 또는 대안 당신은 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 
}