我应该如何退出Qt程序,例如,当加载数据文件时,发现文件损坏,用户需要退出此应用程序或重新启动数据文件?
我应该:
exit(EXIT_FAILURE)
QApplication::quit()
QCoreApplication::quit()
(2)和(3)之间的区别?
发布于 2011-11-06 18:06:14
QApplication是从QCoreApplication派生的,因此继承了quit()
,这是QCoreApplication
的公共插槽,因此QApplication::quit()
和QCoreApplication::quit()
之间没有区别。
正如我们在QCoreApplication::quit()
的文档中所看到的,它“告诉应用程序退出,返回代码为0(成功)。”如果您因为发现文件损坏而想要退出,那么您可能不希望退出时返回代码为零,这意味着成功,所以您应该调用QCoreApplication::exit()
,因为您可以提供一个非零的returnCode,按照惯例,它表示一个错误。
需要注意的是,“如果事件循环没有运行,这个函数(QCoreApplication::exit())什么也不做”,所以在这种情况下,您应该调用exit(EXIT_FAILURE)
。
发布于 2011-11-06 18:00:31
您可以调用qApp.exit();
。我一直在使用它,而且从来没有遇到过问题。
如果您的应用程序是命令行应用程序,您可能确实希望返回退出代码。代码是什么完全由你决定。
发布于 2020-12-02 06:41:31
在搜索这个问题时,我在documentation中发现了这个示例。
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);
当然,对您的特定操作进行必要的修改。
还有这张纸条。
始终使用QueuedConnection将信号连接到此插槽是一种好的做法。如果在控制进入主事件循环之前(例如在"int main“调用exec()之前)发出连接到该插槽的信号(非排队),则该插槽无效,并且应用程序永远不会退出。使用排队连接可确保在控制进入主事件循环之前不会调用插槽。
连接QGuiApplication::lastWindowClosed()信号以退出()是很常见的
https://stackoverflow.com/questions/8026101
复制相似问题