如何在Qt退出时清理

时间:2011-11-17 10:19:51

标签: qt

我想在应用程序退出之前在Qt应用程序中做一些管家事务(比如写入文件等)。如何在Qt中使用此函数(退出或其他任何调用)?

2 个答案:

答案 0 :(得分:34)

您需要将带有清理代码的插槽连接到QCoreApplication::aboutToQuit()信号。

这允许您使用QObject::deleteLater()删除QObject,并且在您尚未离开主应用程序事件循环时将删除对象。

如果您使用的是需要“关闭”调用的C库,通常可以在从QCoreApplication::exec()返回后执行此操作。

两种技术的示例:

int main(int,char**)
{
  QApplication app;
  library_init();
  QWidget window;
  window.show();
  QObject::connect(&app, SIGNAL(aboutToQuit()), &window, SLOT(closing()));
  const int retval = app.exec();
  library_close();
  return retval;
}

答案 1 :(得分:9)

关于Silas Parker的回答,Qt文档说明aboutToQuit信号:

  

如果您的应用程序必须执行某些操作,则该信号特别有用   最后一次清理。请注意,此处无法进行用户交互   状态。

如果您希望应用程序能够取消现有流程或允许用户在应用程序关闭之前执行最后一分钟更改,那么您可以通过处理{{1}中的closeEvent函数来执行此操作}}

MainWindow

有关详细信息,请参阅closeEvent文档。