Qt 프로그램을 종료하는 올바른 방법은 무엇입니까?


129

데이터 파일을로드하거나 파일 손상을 발견 한 경우와 같이 Qt 프로그램을 종료하려면 어떻게해야합니까? 사용자가이 앱을 종료하거나 데이터 파일을 다시 시작해야합니까?

내가해야합니까:

  1. 요구 exit(EXIT_FAILURE)
  2. 요구 QApplication::quit()
  3. 요구 QCoreApplication::quit()

그리고 (2)와 (3)의 차이점은 무엇입니까?

답변:


145

QApplication은 QCoreApplication에서 파생되어 quit()의 공개 슬롯 인 을 상속 QCoreApplication하므로 QApplication::quit()와 사이에는 차이가 없습니다 QCoreApplication::quit().

우리가 QCoreApplication::quit()그것 의 문서에서 읽을 수 있듯이 "응용 프로그램이 리턴 코드 0 (성공)으로 종료하도록 지시합니다." . 파일 손상을 발견하여 종료하려는 경우 성공을 의미하는 리턴 코드 0으로 종료하지 않을 수 있으므로 QCoreApplication::exit(), 일반적으로 오류를 나타내는 0이 아닌 returnCode를 제공 ​​할 수 있으므로 호출해야 합니다.

이 점에 유의하지하는 것이 중요하다 "않습니다 아무것도 이벤트 루프가 실행되고 있지 않은 경우,이 함수 (()을 QCoreApplication :: 출구)" 그래서 경우에 당신이 전화를해야합니다 exit(EXIT_FAILURE).


30

에 전화 할 수 있습니다 qApp.exit();. 나는 항상 그것을 사용하고 그것에 문제가 없었습니다.

애플리케이션이 명령 행 애플리케이션 인 경우 실제로 종료 코드를 리턴 할 수 있습니다. 코드가 무엇인지는 전적으로 귀하에게 달려 있습니다.


3
다음을 수행해야했습니다.qApp->exit();
Frederick Ollinger


-2

main ()에서 응용 프로그램을 닫아야하는 경우이 코드를 사용할 수 있습니다

int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}

OpenSSL이 설치되어 있지 않으면 프로그램이 종료됩니다


1
나는 이것이 컴파일되지 않는다고 생각한다. app.exit (0)은 int를 반환하지 않습니다. 사용하십시오 if(!QSslSocket::supportsSsl()) {return 0;};. app.exec ()가이 행에서 호출되지 않았으므로 app.exit (0)은 아무 것도 수행하지 않습니다. QCoreApplication :: exit ()의 문서를 참조하십시오 . 이벤트 루프가 실행 중이 아니면이 함수는 아무 것도 수행하지 않습니다.
Sacha Guyer

-3
//How to Run App

bool ok = QProcess::startDetached("C:\\TTEC\\CozxyLogger\\CozxyLogger.exe");
qDebug() <<  "Run = " << ok;


//How to Kill App

system("taskkill /im CozxyLogger.exe /f");
qDebug() << "Close";


문제는 새로운 프로세스 분리에 관한 것이 아닙니다
신인 코더
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.