一、简述

今天介绍一个简单的窗口属性——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. 一口气带你踩完五个 List 的大坑,真的是处处坑啊!
  2. python 创意编程 全国-关于举办第五届全国青少年创意编程与智能设计大赛的通知...
  3. MFC框架程序----实现十
  4. 在Linux Debian 8下部署基于PHP的Web项目。
  5. 在Arcmap中加载互联网地图资源的4种方法
  6. 集合中的遍历以及删除元素
  7. sharepoint当流程流转到某个节点对文档进行水印操作
  8. 【Vegas原创】GridView跨页选择多行数据,并循环添加一行DataSet数据
  9. c语言 freopen txt_C语言的文件操作 freopen
  10. 【转】探讨android更新UI的几种方法----不错
  11. 分类问题处理整体正规流程
  12. 如何删除拒绝访问的文件
  13. 用户故事 | 验收标准
  14. python库之airtest和pocoui
  15. 我的世界jAVA如何变创造_我的世界怎么把石头变成空气
  16. ps计算机图片素材,电脑ps怎么把图片变清晰(手把手教你修图)
  17. 笔记本电脑的触摸区域操作
  18. 关于 “总机服务” 新增功能来电弹屏的功能说明
  19. NC65 查询信用余额——客户信用联查、销售订单信用联查等
  20. 他们竟用后台数据偷窥喜欢的女性!Facebook一年半解雇52名工程师

热门文章

  1. 扩展运算符用法实例总结
  2. 快速上手Ubuntu之安装篇——安装win7,Ubuntu16.04双系统
  3. 区块链技术与法律不是敌对双方,而是并肩战友
  4. 一款新的壳---Amber----外文翻译
  5. Java集合框架(JCF)归纳总结
  6. Ubuntu 10.04 用Wine完美运行QQ 2009
  7. Cocos2d游戏开发学习记录——2.使用Cocos2D Graphic实现僵尸的移动
  8. python编程:合并文本_利用列表或字典将两个通讯录文本合并-7
  9. 来 COSCon'21 北京线下聚会,将开心开源进行到底!
  10. 【转】Cent:收益无处不在