Qt中parent的作用

Qt中类,如果继承的话,构造函数都会有一个parent参数,例如:

MainPanel::MainPanel(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainPanel)
{
    
}

或者:

class FileSystemWatcher : public QObject
{
    Q_OBJECT
private:
    explicit FileSystemWatcher(QObject *parent = nullptr);
}

当然,不添加这个参数也不会有问题,除非使用了多线程时。那这个参数是做什么用的呢?

  1. 这个参数指定了组件(类)的父组件。对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任务栏上一般是没有对话框的位置的。怎么指定这个对话框不是顶层容器呢?有父组件的组件不就不是顶层容器了吗?因此只要你指定对话框的parent属性,系统的任务栏就不会出现它的身影。当然,如果你不指定,这个对话框就成为顶层容器了,任务栏会给它留个位置的——利用这个特性,就可以实现特殊对话框可以在任务栏出现的效果,比如“关于”对话框的出现。
  2. parent参数指明了组件的父组件。这样,当父组件delete时,Qt可以保证所有子组件(也就是parent指针指向这个组件的所有组件)都会被正确的delete掉。这是Qt能够帮助我们管理一部分内存的原因所在。Qt是通过遍历parent属性来防止了这一部分内存泄漏的。因此,必要情况下还是不要忘记设置这个parent属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收内存,因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统。
发布了123 篇原创文章 · 获赞 133 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_33879812/article/details/102809111