如何退出 Qt 程序,例如加载数据文件时,发现文件损坏,用户需要退出该应用程序或重新启动数据文件?
我应该:
exit(EXIT_FAILURE)
QApplication::quit()
QCoreApplication::quit()
(2)和(3)的区别是什么?
你可以调用 qApp->exit();。我总是使用它,从来没有问题。
qApp->exit();
如果应用程序是命令行应用程序,则可能确实希望返回退出代码。密码是什么完全取决于你。
QApplication 是从 QCoreApplication 派生出来的,因此继承了 quit(),quit()是 QCoreApplication的公共时隙,所以 QApplication::quit()和 QCoreApplication::quit()没有区别。
quit()
QCoreApplication
正如我们可以在 QCoreApplication::quit()的文档中读到的,它是 “告诉应用程序退出,返回代码为0(成功)。”。如果你想退出,因为你发现文件损坏,那么你可能不想退出与返回代码零,这意味着成功,所以你应该调用 QCoreApplication::exit(),因为你可以提供一个非零返回代码,根据约定,表明一个错误。
QCoreApplication::exit()
重要的是要注意 ”如果事件循环没有运行,则此函数(QCoreApplication: : exit ())不执行任何操作”,因此在这种情况下应该调用 exit(EXIT_FAILURE)。
如果需要从 main ()关闭应用程序,可以使用下面的代码
int main(int argc, char *argv[]){ QApplication app(argc, argv); ... if(!QSslSocket::supportsSsl()) return app.exit(0); ... return app.exec(); }
如果没有安装 OpenSSL,程序将终止
如果你正在使用 Qt 占碑,这个应该可以:
QApplication.closeAllWindows();
//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";
例子
在搜索这个问题时,我在 文件中发现了这个例子。
QPushButton *quitButton = new QPushButton("Quit"); connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
当然是为了你的特殊行动。
还有这张纸条。
最好总是使用 如果连接到此插槽的信号(非排队)为 在控件进入主事件循环之前(如在“ int”之前)发出 Main“调用 exec () ,插槽没有任何效果,应用程序从不 使用排队连接可以确保插槽不会 直到控件进入主事件循环之后才调用。 常见的方法是连接 QGuidApplication: : lastWindowClose ()信号 辞职
最好总是使用 如果连接到此插槽的信号(非排队)为 在控件进入主事件循环之前(如在“ int”之前)发出 Main“调用 exec () ,插槽没有任何效果,应用程序从不 使用排队连接可以确保插槽不会 直到控件进入主事件循环之后才调用。
常见的方法是连接 QGuidApplication: : lastWindowClose ()信号 辞职