2011-11-06 280 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