2012-08-22 2 views
1

는이 같은 예는 다음과 같습니다호출의 QApplication :: 간부 인() 인 QDialog :: 간부 인 후() Qt의 책에서

:

int main(int argc, char *argv[]) 
{  
    QApplication app(argc,argv); 
    QDialog dialog; 
    dialog.show(); 
    return app.exec();  
} 

이 잘 작용,하지만 아래에 약간의 변경 후 내가 대화 상자의 오른쪽 상단 cornor에있는 닫기 버튼을 쳤을 때

int main(int argc, char *argv[]) 
{  
    QApplication app(argc,argv); 
    QDialog dialog; 
    dialog.exec(); 
    return app.exec();  
} 

는 대화 상자가 disappered하지만 프로그램은 여전히 ​​

dialog.exec()와 app.exec()의 차이점은 무엇

를 실행? 간단히 dialog.exec()를 사용하고 0을 반환하거나 문제가 발생할 수 있습니까?

답변

4

QDialog, QMenu, QCoreApplication의 exec 메서드는 이벤트 루프를 실행합니다. 이벤트 루프는 무한합니다.

QApplication 이벤트 루프는 시작될 첫 번째 루프 여야합니다. 대부분의 경우 QDialog :: exec() 대신 QDialog :: show() 또는 QDialog :: open()을 사용해야합니다.

while (1) // QDialog::exec 
{ 
    // Close event 
} 

while (1) // QApplication::exec 
{ 
    // There are no events 
} 
: 다음 코드를 즉