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

Posted zhlabcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于parent指针以及对话框属性相关的知识,希望对你有一定的参考价值。

程序写多了,就会在各个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指针以及对话框属性的主要内容,如果未能解决你的问题,请参考以下文章

QT_5-QDialog

Qt学习五 - 对话框

向UI发送参数并使用Java / Vaadin更新UI

QT 对话框二

Android课程---关于对话框的学习

QT之贪吃蛇