Qt程序退出相关资源释放问题

目录

问题背景:

aboutToQuit

代码举例

closeEvent事件

代码举例

程序退出方式

quit()

 exit(int returnCode = 0)

 close()


问题背景:

         实际项目中程序退出前往往需要及进行一些资源释放、配置保存、线程中断等操作,避免资源浪费,配置参数丢失等;但是Qt程序默认的退出方式并不能释放主动申请的这些资源,因此在程序关退出前需要主动进行资源回收和记录退出方式等。

aboutToQuit

        aboutToQuit信号是QCoreApplication类的一个信号,它在应用程序即将退出时发出。这个信号对于在应用程序关闭前执行一些清理工作非常有用,比如保存设置、释放资源等。 使用场景:通常连接到一个槽函数,用于处理应用程序退出前的清理工作。

代码举例

通过连接 aboutToQuit信号到资源释放槽函数,从而达到在程序退出前进行资源释放操作。

int main(int argc, char *argv[])
{QApplication a(argc, argv);THWritterTool w;w.show();QObject::connect(qApp, &QCoreApplication::aboutToQuit, [&]() {cLogger("THWritterTool")->info("THWritterTool程序正常退出!");w.Destroy();ReleaseResource();});int ret = a.exec();//在事件循环结束后进行一些资源释放 一些非正常退出无aboutToQuit信号releaseResource();return ret;
}

closeEvent事件


        closeEvent是QWidget类的一个事件处理函数,当窗口关闭时,Qt会调用这个函数。通过重写主界面的这个函数可在窗口关闭前执行一些自定义的操作,比如询问用户是否真的要关闭窗口,或者保存未保存的数据。 

代码举例

void THWritterTool::closeEvent(QCloseEvent * event)
{if (!m_AuthorithyVertify){QTHMessageBox::TimerMessage(this, QMessageBox::Critical, QObject::tr("授权未验证通过,程序即将退出!"), 15 * 1000);cLogger("THWritterTool")->info("授权未验证通过退出");}else if (m_switchDB){QTHMessageBox::TimerMessage(this, QTHMessageBox::Critical, QObject::tr("数据库已切换,程序即将退出!"), 15 * 1000);cLogger("THWritterTool")->info("切换数据库程序退出");}else{if (m_savingCfg){QTHMessageBox::TimerMessage(this, QTHMessageBox::Warning, QObject::tr("正在保存配置文件,无法退出。"), 15 * 1000);event->ignore();//忽略退出事件return;}ret = QTHMessageBox::question(this, tr("是否要退出程序?"), QTHMessageBox::Yes | QTHMessageBox::No);if (ret == QTHMessageBox::Yes){cLogger("THWritterTool")->info("用户手动确认退出");}}cLogger("THWritterTool")->info("正常退出");g_pTHSplashScreen->show();//启动画面qApp->processEvents();//保证退出时候展示启动画面事件可运行 避免卡死Destroy();event->accept();//接收事件 不在传递
}

程序退出方式

quit()

      • quit()是QCoreApplication类(以及继承自它的QApplication类)的一个静态函数,用于退出整个Qt应用程序。

      • 当调用quit()时,它会退出主事件循环,触发QApplication::exec()返回,并关闭所有打开的窗口。程序会完全终止。

      • quit()通常用于在应用程序中实现“退出”功能,比如在菜单项的“退出”操作上绑定这个函数。

      • quit()作为槽函数,也可以连接信号和槽,响应某个信号后关闭应用程序。
      
      • 调用quit后程序在退出前会触发aboutToQuit信号

 exit(int returnCode = 0)

      • exit()和quit()类似,也是用于退出应用程序。

      • exit()可以指定一个返回代码(returnCode),该代码将在应用程序退出时返回给操作系统。

      • 它同样会结束主事件循环并关闭所有窗口。

      • exit()更适合在需要返回特定退出代码的场景中使用。
      
      • 调用exit后程序在退出前会触发aboutToQuit信号

 close()

      • close()是QWidget类的成员函数,用于关闭单个窗口或控件。

      • 调用close()会尝试关闭该窗口或控件,关闭前会触发closeEvent()事件。如果该窗口是主窗口,且所有子窗口都已关闭,应用程序会退出,退出前会触发和aboutToQuit信号。

      • close()适用于关闭单个窗口或控件的场景,比如“关闭”按钮的操作。

      • 当用户点击窗口右上角的“X”按钮时,系统也会自动调用该窗口的close()函数。
      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/71502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【DeepSeek】Mac m1电脑部署DeepSeek

一、电脑配置 个人电脑配置 二、安装ollama 简介:Ollama 是一个强大的开源框架,是一个为本地运行大型语言模型而设计的工具,它帮助用户快速在本地运行大模型,通过简单的安装指令,可以让用户执行一条命令就在本地运…

[生活杂项][运动教程]自由泳

https://v.youku.com/v_show/id_XMzgzMjkwMzg0MA.html?spma2h0k.11417342.soresults.dtitle https://v.youku.com/v_show/id_XMzgxNjM2NjY4NA.html?spma2h0k.11417342.soresults.dtitle

Linux的指令与热键

一.指令 1.pwd :显示一个用户当前所处的目录 2.ls :显示当前目录下的文件(显示当前文件属性) ls -l :显示当前目录下文件的属性及更多内容(ll是ls -l的别名,用法相同) ls -l 目录:显示指定目录内容 ls…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 明确pytorch安装依赖2.2.2 conda创建虚拟环境2.2.3 安装pytorch2.2.4 验证pytorch安装2.2.5 安装Tensorflow2.2.6 验证Tensorflow安装 三、疑问四、总结 一、待解决问题 1.1 问题…

马拉车算法

Manacher算法 ,用于处理最长回文字符串的问题,可以在O(n)的情况下,求出一个字符串的最长回文字符串 回文串的基础解法: 以每个点为中心对称点,看左右两边的点是否相同。这种算法的时间复杂度为O&#xff0…

气象学中的CDO插值(多方法+多分辨率)

文章目录 说明CDO代码 说明 需要新建.sh脚本文件,将下面的CDO代码复制到.sh脚本中,然后运行插值程序。 CDO代码 #!/bin/bash # # 用户配置区(按实际需求修改) # input_directory"2m_temperature" # 自定义路径 gr…

计算机网络:应用层 —— 动态主机配置协议 DHCP

文章目录 什么是 DHCP?DHCP 的产生背景DHCP 的工作过程工作流程地址分配机制 DHCP 中继代理总结 什么是 DHCP? 动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)是一种网络管理协议,用于自动分…

【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动:nvidia-550(1)查询显卡ID(2)PCI ID Repository查询显卡型号(3&#xf…

数据导入AI训练步骤——人工智能训练

一、人工操作转化 数据导入过程 整理excel表格,通过数据库管理工具导入数据,补充数据格式,调整sql语句 复制数据到目标数据 二、整理表格 三、导入数据 通过数据库导入数据 四、合并 五、验证更新数据 六、 更新数据 update temp_cus_hmz…

我国首条大型无人机城际低空物流航线成功首航

首航震撼开场:羊肉 “飞” 越 540 公里 在夜色的笼罩下,榆阳马合通用机场的跑道上,一架大型固定翼无人机蓄势待发,机身被灯光照亮,宛如一只即将展翅翱翔的钢铁巨鸟。它的货舱里,满满装载着新鲜的榆林羊肉&a…

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…

微软Win11新动态:官方“换机助手”曝光,PC数据迁移或迎全新体验

目录 微软入局数据迁移领域,第三方工具或面临挑战 无缝迁移体验:近距离传输与OTP验证 模拟图仅为概念设计,最终功能或存变数 发布时间未定,Insider用户或率先体验 总结 微软在近期发布了Windows 11 Insider Beta频道的最新版本Build 22635.4945。尽管此次更新并未引入重…

Could not initialize class io.netty.util.internal.Platfor...

异常信息: Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class io.netty.util.internal.PlatformDependent0 Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.reflect.InaccessibleObjec…

java练习(34)

ps:题目来自力扣 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 class Solution {public double findMedianSortedA…

用Java创建一个验证码的工具类

在Java中创建一个验证码工具类,可以通过以下代码实现。该工具类支持生成包含字母和数字的随机验证码图片,并添加干扰线和噪点以提高安全性。以下是详细实现: 完整代码实现 import javax.imageio.ImageIO; import java.awt.*; import java.aw…

提升信息检索准确性和效率的搜索技巧

一、基础技巧 精准关键词 避免长句子,提取核心关键词(如用“光合作用 步骤”代替“请告诉我光合作用的具体过程”)。 同义词替换:尝试不同表达(如“AI 发展史” vs “人工智能 历史”)。 排除干扰词 使用…

设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)

文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中,对象的创建是一个常见且基础的操作。然而,当项目规模逐渐…

DAY12 Tensorflow 六步法搭建神经网络

六步法: 一.import 导入各种库,比如: import tensorflow as tf from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras import Model import numpy as np import pandas as pd # 可能还会根据需求导入其他库&…

Zookeeper分布式锁实现

zookeeper最初设计的初衷就是为了保证分布式系统的一致性。本文将讲解如何利用zookeeper的临时顺序结点,实现分布式锁。 目录 1. 理论分析 1.1 结点类型 1.2 监听器 1.3 实现原理 2. 手写实现简易zookeeper分布式锁 1.1 依赖 1.2 常量定义 1.3 实现zookeeper分布式…