一、简述

今天介绍一个简单的窗口属性——Qt::WA_DeleteOnClose

在正常创建窗口后,我们一般会调用close()方法来关闭窗口,这里我们看一下Q助手中关于close()方法的介绍。

bool QWidget::close()
Closes this widget. Returns true if the widget was closed; otherwise returns false.

First it sends the widget a QCloseEvent. The widget is hidden if it accepts the close event. If it ignores the event, nothing happens. The default implementation of QWidget::closeEvent() accepts the close event.

If the widget has the Qt::WA_DeleteOnClose flag, the widget is also deleted. A close events is delivered to the widget no matter if the widget is visible or not.


调用close()方法后首先它会向widget发送一个关闭事件(QCloseEvent)。如果widget接受了关闭事件(QCloseEvent),窗口将会隐藏(实际上调用hide())。如果widget不接受关闭事件,那么窗口将什么也不做。默认情况下widget会接受关闭事件,我们可以重写QCloseEvent事件,可以选择接受或者不接受。

如果widget设置了Qt::WA_DeleteOnClose属性,widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。

所以说调用close()并不一定就会将窗口对象销毁。而只有设置了 Qt::WA_DeleteOnClose属性才会删除销毁。如果这个属性没有设置,close()的作用和hide(),setvisible(false)一样,只会隐藏窗口对象而已,并不会销毁该对象。


Qt::WA_DeleteOnClose属性在Qt助手中的解释

Qt::WA_DeleteOnClose Makes Qt delete this widget when the widget has accepted the close event (see QWidget::closeEvent()).

如果窗口设置了Qt::WA_DeleteOnClose 这个属性,在窗口接受了关闭事件后,Qt会释放这个窗口所占用的资源。


this->setAttribute(Qt::WA_DeleteOnClose);

所以如果我们在程序中通过 new 的方式创建一个窗口,可以给该窗口设置 Qt::WA_DeleteOnClose属性。这样在关闭这个窗口时Qt能够自动回收该窗口所占用的资源,这样能够及时回收无效的资源,有用利于节约内存空间。


下面是我做了一个小测试,通过不断打开窗口,再关闭所有打开的窗口。在任务管理器中对比该应用程序所占用的资源大小。

设置 了Qt::WA_DeleteOnClose属性


未设置 Qt::WA_DeleteOnClose属性


从上两幅图中可以看到,在不停地打开窗口,程序占用内存不断增加,而在所有窗口关闭的过程中,设置了 Qt::WA_DeleteOnClose属性的情况下我们发现关闭的窗口所占用的内存资源在不断回收,全部关闭后恢复到之前的状态。而没有设置Qt::WA_DeleteOnClose属性的情况下我们发现关闭的窗口所占用的内存资源并没有减少。这就说明,关闭的窗口内存未被回收。

由此看来Qt::WA_DeleteOnClose属性的重要性了。

Qt 窗口属性简介之Qt::WA_DeleteOnClose相关推荐

  1. Qt Quick 3D简介

    Qt Quick 3D简介 前言 Qt Quick 3D是Qt自带的一套3D图形系统,与传统的Qt 3D不同的是,Qt Quick 3D采用QML来进行开发.本节则对Qt Quick 3D进行一次简单 ...

  2. QT-QT简介,QT环境与工具链(day1)

    一.QT简介 QT是跨平台的C++ GUI应用程序开发框架 QT版本查看:qmake -v 1.QT的发展历史 1)1991年诞生//Haavard Nord,Eirik Chambe-Eng 2)1 ...

  3. [Qt教程] 第21篇 数据库(一)Qt数据库应用简介

    [Qt教程] 第21篇 数据库(一)Qt数据库应用简介 楼主  发表于 2013-5-13 20:56:39 | 查看: 1403| 回复: 13 Qt数据库应用简介 版权声明 该文章原创于作者yaf ...

  4. QT简介及QT环境搭建

    QT简介及QT环境搭建 文章目录 QT简介及QT环境搭建 一.QT简介 1. 什么是QT? 2. QT的发展史 3. QT支持的平台 4. QT的优点 5. QT开发工具 二.QT环境搭建(CentO ...

  5. linux qt应用程序全屏,QT中MDI应用程序中更改子窗口大小或是全屏显示子窗口的方法...

    1.QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示. 但是他只对窗口模式的部件有用.子窗口的特征是 Qt::SubWindow,不是独立的窗口.因此对其 ...

  6. 深度探索QT窗口系统——几何篇

    深度探索QT窗口系统--几何篇 窗口作为界面编程中最重要的部分,没有窗口就没有界面,是窗口让我们摆脱了DOS时代,按钮是一个窗口,文本框是一个窗口,标签页是一个窗口.一个窗口可以由多个窗口组成,每天我 ...

  7. Qt窗口部件——QWidget

    QT窗口部件--QWidget 1. 窗口部件与子部件 2. 窗口类型 3. 窗口几何布局 4. qDebug调试程序 QWidget类是所有用户界面对象的基类,被称为基础窗口部件. QWidget继 ...

  8. Linux下Qt窗口半透明,Qt实现嵌入桌面的半透明窗口 good

    一.将Qt窗口嵌入到桌面中. 声明一个最简单的类: class Dialog : public QDialog {         Q_OBJECT public:         Dialog(QW ...

  9. QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)

    QT概念 Qt:Qt是一个跨平台的C++框架(C++库),Qt除了支持界面设计(GUI编程),还封装了与网络编程.多线程.数据库连接.视频音频等相关的功能. ctrl 撤销(返回上一步) 市面常见的G ...

最新文章

  1. python变量类型-Python 变量类型详解
  2. matlab中max和find函数详解
  3. visual studio安装python插件_Visual Studio 2012 Ultimate 上安装 Python 开发插件 PTVS
  4. 关于拦截hao123页面广告的自定义规则
  5. 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
  6. 关于Tomcat如何处理Open Redirect的问题
  7. Python中遍历指定目录
  8. AI 时代,程序员从小白到小牛的发展攻略丨今晚直播送机械键盘!
  9. CalHypso——用于计算面积高程积分(HI)曲线的ArcGis扩展工具
  10. 海信电视 android,海信聚好看app下载 海信聚好看(电视微助手) for Android V5.7.0.9 安卓手机版 下载-脚本之家...
  11. 芯片架构--四大处理器架构
  12. java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
  13. java实现学生信息管理系统
  14. CA65测试针对的是哪些产品呢
  15. [供应链•案例篇] 走出皮革鞋类品牌寒冬,红蜻蜓战略聚焦全链路数智化转型
  16. 现代计算机发展经历的阶段,计算机的发展经历了那几个阶段
  17. 数码博主自用五款高性价比蓝牙耳机分享,双11不想踩雷选什么蓝牙耳机好?
  18. 【转】C 语言吧 · 问题资料大全【转】
  19. DeepDGA:基于生成对抗网络的DGA生成与检测
  20. MPLS及LDP协议基础(转载)

热门文章

  1. Dubbo SpringBoot 实战
  2. 【Java基础】Java位运算
  3. python xpath定位不到_Xpath定位方法深入探讨及元素定位失败常见情况
  4. 如何安装EasyX图形库
  5. 软件测试 3 写测试用例 ---实例
  6. 阿司匹林计算机音乐,阿司匹林
  7. Netcdf4excel
  8. 腾讯随心播配置及开发
  9. 服务器有无线路由器怎么设置密码,服务器可以无线路由器设置密码
  10. 数据可视化知识总结(一)