Qt 窗口属性简介之Qt::WA_DeleteOnClose
来源:互联网 发布:mssql server 2008 编辑:程序博客网 时间:2024/05/21 19:32
一、简述
今天介绍一个简单的窗口属性——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);
- 1
- 1
所以如果我们在程序中通过 new 的方式创建一个窗口,可以给该窗口设置 Qt::WA_DeleteOnClose属性。这样在关闭这个窗口时Qt能够自动回收该窗口所占用的资源,这样能够及时回收无效的资源,有用利于节约内存空间。
下面是我做了一个小测试,通过不断打开窗口,再关闭所有打开的窗口。在任务管理器中对比该应用程序所占用的资源大小。
设置 了Qt::WA_DeleteOnClose属性
未设置 Qt::WA_DeleteOnClose属性
从上两幅图中可以看到,在不停地打开窗口,程序占用内存不断增加,而在所有窗口关闭的过程中,设置了 Qt::WA_DeleteOnClose属性的情况下我们发现关闭的窗口所占用的内存资源在不断回收,全部关闭后恢复到之前的状态。而没有设置Qt::WA_DeleteOnClose属性的情况下我们发现关闭的窗口所占用的内存资源并没有减少。这就说明,关闭的窗口内存未被回收。
由此看来Qt::WA_DeleteOnClose属性的重要性了。
http://blog.csdn.net/goforwardtostep/article/details/53647146
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
- QT中WA_DeleteOnClose属性
- Qt之Qt::WA_DeleteOnClose详解
- QT setAttribute(Qt::WA_DeleteOnClose)
- Qt对话框/窗口、模态和非模态、Qt::WA_DeleteOnClose
- Qt 框架_setAttribute(Qt::WA_DeleteOnClose)使用注意
- Qt中的窗口属性
- Qt::WA_DeleteOnClose 造成的野指针问题
- Qt::WA_DeleteOnClose 造成的野指针问题
- Qt::WA_DeleteOnClose造成的野指针问题
- Qt之窗口部件
- QT之窗口移动
- QT之窗口
- Qt之属性系统
- Qt 类简介之 Qt QApplication 类
- Qt 学习之路--Qt 模块简介
- Qt 类简介之 Qt QApplication 类
- HTML5 <template>标签元素简介
- XML文件生成XSD文件的方法
- spring boot Filter 注入bean
- Android 对象重用注意点
- STL源码学习----内存管理
- Qt 窗口属性简介之Qt::WA_DeleteOnClose
- myeclipse报An error has occurred,See error log for more details. java.lang.NullPointerException错误解决办法
- (搬运)在VS2013以上版本中无法使用配置工具的解决方案
- eclipse+maven环境搭建问题总结
- linux操作命令
- 初学安卓-安卓广播
- Spring Filter过滤器,Spring拦截未登录用户权限限制
- Swift 3.0 数组的语法小变动
- 电容参数X5R,X7R,Y5V,COG