Qt中QObject中的parent参数
Posted 写代码是一种艺术,甚于蒙娜丽莎的微笑!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中QObject中的parent参数相关的知识,希望对你有一定的参考价值。
今天写了一个小程序,验证了带参的构造函数中参数parent的作用。
在MainWindow中声明一个QDialog类型的指针,在MainWindow中对它进行初始化。我采用了两种初始化方式,一种是带参的构造函数,一种是不带参的构造函数。如下:
/*mainwindow.h*/ ... QDialog *dialog; ... /*mainwindow.cpp*/ //第一种方式,用不带参的构造进行初始化 dialog = new QDialog; //第二种方式,用带参的构造函数初始化 dialog = new QDialog(this);
dialog->show();
两种方式的显示情况是不同的,第一种方式在任务栏中会有该对话框的位置,也就是说虽然是mainwindow中的成员变量,但是在显示时是和mainwindow平级的。关闭mainwindow,dialog不会被关闭。第二种方式在任务栏中只有mainwindow的位置,不会出现dialog的位置。并且关闭mainwindow,dialog对话框会自动关闭。
这是parent参数导致的,在Qt中parent参数就是指定该组件的父组件,例如dialog初始化时没有指定其父组件,那么它就是一个顶层容器,所以任务栏就会给其留个位置。使用parent参数指明组件的父组件有个好处,就是当父组件被delete时,Qt可以保证所有子组件也就是将parent指针指向当前组件的所有组件都会被delete掉。Qt可以通过遍历parent属性来防止内存泄漏。
以上是关于Qt中QObject中的parent参数的主要内容,如果未能解决你的问题,请参考以下文章
Qt构造函数的参数:QObject *parent = Q_NULLPTR
'QObject& QObject::operator=(const QObject&)' is private——无法将自定义的QObject子类放入Qt容器(con