Sil*_*ker 34
您需要将带有清理代码的插槽连接到QCoreApplication::aboutToQuit()信号.
这允许您删除QObjects,QObject::deleteLater()并且当您尚未离开主应用程序事件循环时将删除对象.
如果您使用的是需要"关闭"调用的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;
}
Run Code Online (Sandbox Code Playgroud)
关于Silas Parker的回答,Qt文档说明了这个aboutToQuit信号:
如果您的应用程序必须进行最后一秒的清理,则该信号特别有用.请注意,在此状态下无法进行用户交互.
如果您希望应用程序能够取消现有流程或允许用户在应用程序关闭之前执行最后一分钟更改,那么您可以通过处理您的应用程序中的closeEvent功能来执行此操作MainWindow.
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅closeEvent文档.