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

Qt内存回收(转载)

对象模型(对象树)

6控件

Qt:当多个排队信号调用同一个槽时如何避免死锁

'QObject& QObject::operator=(const QObject&)' is private——无法将自定义的QObject子类放入Qt容器(con