首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >退出Qt程序的正确方法?

退出Qt程序的正确方法?
EN

Stack Overflow用户
提问于 2011-11-06 17:15:37
回答 6查看 160.4K关注 0票数 143

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

我应该:

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

(2)和(3)之间的区别?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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)

票数 163
EN

Stack Overflow用户

发布于 2011-11-06 18:00:31

您可以调用qApp.exit();。我一直在使用它,而且从来没有遇到过问题。

如果您的应用程序是命令行应用程序,您可能确实希望返回退出代码。代码是什么完全由你决定。

票数 32
EN

Stack Overflow用户

发布于 2020-12-02 06:41:31

在搜索这个问题时,我在documentation中发现了这个示例。

代码语言:javascript
复制
QPushButton *quitButton = new QPushButton("Quit");
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);

当然,对您的特定操作进行必要的修改。

还有这张纸条。

始终使用QueuedConnection将信号连接到此插槽是一种好的做法。如果在控制进入主事件循环之前(例如在"int main“调用exec()之前)发出连接到该插槽的信号(非排队),则该插槽无效,并且应用程序永远不会退出。使用排队连接可确保在控制进入主事件循环之前不会调用插槽。

连接QGuiApplication::lastWindowClosed()信号以退出()是很常见的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8026101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档