QApplication 是从 QCoreApplication 派生的,因此继承了 quit()
,它是 QCoreApplication
的公共槽,因此 QApplication::quit()
和 QCoreApplication::quit()
之间没有区别。
正如我们在 QCoreApplication::quit()
的文档中看到的那样,它“告诉应用程序退出并返回代码 0(成功)。”。如果您因为发现文件损坏而想要退出,那么您可能不想以返回代码零退出,这意味着成功,因此您应该调用 QCoreApplication::exit()
,因为您可以提供一个非零的 returnCode,按照惯例,它表示错误。
需要注意的是,“如果事件循环没有运行,这个函数 (QCoreApplication::exit()) 什么都不做”,所以在这种情况下你应该调用 exit(EXIT_FAILURE)
。
您可以致电 qApp->exit();
。我总是使用它,从来没有遇到过问题。
如果您的应用程序是命令行应用程序,您可能确实想要返回退出代码。代码是什么完全取决于您。
如果您使用的是 Qt Jambi,这应该可以:
QApplication.closeAllWindows();
在搜索这个问题时,我在 documentation 中发现了这个示例。
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
当然,对于您的特定行为,请进行必要的修改。
连同这个笔记。
始终使用 QueuedConnection 将信号连接到此插槽是一种很好的做法。如果在控制进入主事件循环之前(例如在“int main”调用 exec() 之前)发出连接(非排队)到该插槽的信号,则该插槽无效并且应用程序永远不会退出。使用排队连接可确保在控制进入主事件循环之前不会调用插槽。将 QGuiApplication::lastWindowClosed() 信号连接到 quit() 是很常见的
如果您需要从 main() 关闭您的应用程序,您可以使用此代码
int main(int argc, char *argv[]){
QApplication app(argc, argv);
...
if(!QSslSocket::supportsSsl()) return app.exit(0);
...
return app.exec();
}
如果未安装 OpenSSL,程序将终止
if(!QSslSocket::supportsSsl()) {return 0;};
。因为在这一行没有调用 app.exec(),所以 app.exit(0) 什么都不做,参见 QCoreApplication::exit() 的文档:如果事件循环没有运行,这个函数什么也不做。< /我>
//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();