2011-11-06 84 views
96

我應該如何退出Qt程序,例如加載數據文件並發現文件損壞,並且用戶需要退出該應用程序或重新啓動數據文件?退出Qt程序的正確方法?

我應該:

  1. 呼叫exit(EXIT_FAILURE)
  2. 呼叫QApplication::quit()
  3. 呼叫QCoreApplication::quit()

之間的差異(2)和(3)?

回答

107

的QApplication從QCoreApplication衍生,從而繼承quit()這是QCoreApplication一個公共時隙,所以有QApplication::quit()QCoreApplication::quit()之間沒有差別。

正如我們可以在quit()的文檔中看到的,它「告訴應用程序退出時返回代碼爲0(成功)。」。如果你想退出是因爲你發現了文件損壞,那麼你可能不希望退出時返回代碼爲零,這意味着成功,所以你應該調用QCoreApplication::exit(),因爲你可以提供一個非零的returnCode,按照慣例,它表示一個錯誤。

需要注意的是「如果事件循環沒有運行,這個功能(QCoreApplication ::退出()),什麼都不做」,所以在這種情況下,你應該叫exit(EXIT_FAILURE)是很重要的。

27

您可以撥打qApp.exit();。我總是使用它,從來沒有問題。

如果你的應用程序是一個命令行應用程序,你可能確實想要返回一個退出代碼。這完全取決於你的代碼是什麼。

+0

不工作在QT5 – YumYumYum

+1

QT5這個工作的QApplication ::退出() – YumYumYum

+0

我需要做到以下幾點:'qApp->退出();' –

1

,如果你需要關閉主從()你的應用程序,你可以使用此代碼

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

如果如果你使用Qt Jambi的,這應該是沒有安裝OpenSSL的

+0

我認爲這不會編譯。 app.exit(0)不返回一個int。使用'if(!QSslSocket :: supportsSsl()){return 0;};'。因爲app.exec()沒有在這一行被調用,所以app.exit(0)什麼都不做,請參閱QCoreApplication :: exit()的文檔:_If事件循環沒有運行,這個函數什麼都不做._ –

-2

程序將終止工作:

QApplication.closeAllWindows(); 
0
//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"; 

example

+0

如果您修復代碼格式,則更容易閱讀。 – Shashanth