码迷,mamicode.com
首页 > 其他好文 > 详细

关于parent指针以及对话框属性

时间:2019-05-13 21:31:30      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:博客   列表   关闭   sdn   析构   net   new   模态对话框   就会   

程序写多了,就会在各个Qt函数里面都发现parent指针的身影,出于知识补全写个博客记录一下。

先从明显的角度上来说:

指定了parent指针(或者this指针)的对象的构造函数所构造出的窗口,是不作为顶层窗口出现的,而是作为父组件的子对话框(区别就是系统任务栏,没有parent指针的会出现两个顶层窗口,而指定了parent指针的,任务栏只会出现一个窗口)。

并且,如果作为子组件的话,出现的子组件窗口默认位于父窗口的中央位置 。

再从“对象树”的角度来说:

Qt有个对象树机制,具体这里不多说(从名字就可以看出来长啥样了)

添加了parent指针的对象会自动添加到其父对象的children()列表,当父对象析构的时候,children()列表里面所有的子对象也都会被析构,反过来,如果某个子对象被析构了,则从children()列表中删去这个子对象(对父对象本身没影响)。这样子就可以保证:当父窗口(对象)delete(shutdown)掉的时候,他的子组件(对象)也可以被正确地关闭,这样子就帮助了我们正确的管理了内存,防止了内存泄露。

 



另外再谈一下对话框属性:分为模态对话框非模态对话框,模态对话框又分成程序级的模态(QDialog.exec() ),窗口级的模态(QDialog::open())。非模态对话框(QDialog.show())。

程序级别的模态就是只能操作这个窗口,操作完了之后才能操作别的窗口。

窗口级别的模态仅仅阻塞和这个窗口相关联的几个窗口。

非模态的不阻塞,可以任意操作。

 

parent可以参照这个博客:https://blog.csdn.net/jh1513/article/details/52311372

对话框相关知识参照:https://www.devbean.net/2012/09/qt-study-road-2-dialogs-intro/

PS:new关键字创建的内存在堆上,不会被析构,而创建在栈上的会背析构。

 

关于parent指针以及对话框属性

标签:博客   列表   关闭   sdn   析构   net   new   模态对话框   就会   

原文地址:https://www.cnblogs.com/zhlabcd/p/10859053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!