退出 QT 程序的正确方法?

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

我应该:

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

(2)和(3)的区别是什么?

176684 次浏览

你可以调用 qApp->exit();。我总是使用它,从来没有问题。

如果应用程序是命令行应用程序,则可能确实希望返回退出代码。密码是什么完全取决于你。

QApplication 是从 QCoreApplication 派生出来的,因此继承了 quit()quit()QCoreApplication的公共时隙,所以 QApplication::quit()QCoreApplication::quit()没有区别。

正如我们可以在 QCoreApplication::quit()的文档中读到的,它是 “告诉应用程序退出,返回代码为0(成功)。”。如果你想退出,因为你发现文件损坏,那么你可能不想退出与返回代码零,这意味着成功,所以你应该调用 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 ()信号 辞职