当在Qt程序中加载数据文件时发现文件损坏,用户需要退出该应用或重新初始化数据文件时,应该如何退出程序?
以下哪种方法是正确的:
- 调用
exit(EXIT_FAILURE)
- 调用
QApplication::quit()
- 调用
QCoreApplication::quit()
(2)和(3)之间有什么区别?
注:exit() 是 C++ 标准库函数, QApplication::quit() 和 QCoreApplication::quit() 是 Qt 程序框架提供的函数。
QApplication继承自QCoreApplication,因此继承了QCoreApplication的公共槽函数quit(),所以QApplication::quit()和QCoreApplication::quit()没有区别。
根据QCoreApplication::quit()文档所述:它"告诉应用程序使用返回代码0(成功)退出"。如果您想因为发现文件损坏而退出,则不应该使用返回码0表示成功,这种情况下您应该调用QCoreApplication::exit(),因为您可以提供一个非零的返回码,按照惯例,这表示发生错误。
需要注意的是"如果事件循环未运行,则此函数(QCoreApplication::exit())不会执行任何操作",所以在这种情况下您应该调用exit(EXIT_FAILURE)
。
qApp->exit();
。我经常使用它,并且从未遇到问题。QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
QApplication.closeAllWindows();
int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}
if(!QSslSocket::supportsSsl()) {return 0;};
。因为在此行未调用app.exec(),所以app.exit(0)不会执行任何操作,请参考QCoreApplication::exit()的文档:如果事件循环没有运行,则此函数不执行任何操作。 - Sacha Guyer//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";
qApp->exit();
- Frederick Ollinger