退出Qt程序的正确方法?


129

我应该如何退出Qt程序,例如在加载数据文件时发现文件损坏,并且用户需要退出该应用程序或重新启动数据文件?

我是不是该:

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

(2)和(3)之间有什么区别?

Answers:


145

QApplication是从QCoreApplication派生的,因此继承了QApplication quit()的公共插槽QCoreApplication,因此QApplication::quit()和之间没有区别QCoreApplication::quit()

正如我们在文档中所读到的那样QCoreApplication::quit()“告诉应用程序退出并返回代码0(成功)。” 。如果由于发现文件损坏而要退出,则可能不希望退出并返回零,这表示成功,因此应调用QCoreApplication::exit()因为您可以提供非零的returnCode,按照惯例,该代码表示​​错误。

请务必注意,“如果事件循环未运行,则此函数(QCoreApplication :: exit())不会执行任何操作”,因此在这种情况下,您应该调用exit(EXIT_FAILURE)


30

您可以致电qApp.exit();。我总是使用它,从来没有问题。

如果您的应用程序是命令行应用程序,则可能确实需要返回退出代码。代码是什么完全取决于您。


3
我需要执行以下操作:qApp->exit();
弗雷德里克·奥林格


-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)不返回整数。使用if(!QSslSocket::supportsSsl()) {return 0;};。由于未在此行调用app.exec(),因此app.exit(0)不执行任何操作,请参见QCoreApplication :: exit()的文档:如果事件循环未运行,则此函数不执行任何操作。
萨查·盖尔

-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";


问题不是关于分离新进程的问题
新手编码员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.