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.pswp.cn/bicheng/71502.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71502.shtml
英文地址,請注明出處:http://en.pswp.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分布式…