zoukankan      html  css  js  c++  java
  • 关于parent指针以及对话框属性

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

    先从明显的角度上来说:

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

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

    记住,null和0是两码事,不能说QWidget  *parent = 0没指定parent指针,相反,指定了指针,只不过暂时初始化为0(后面构造函数会操作)。

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

    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关键字创建的内存在堆上,不会被析构,而创建在栈上的会背析构。

    原来人类的悲欢并不相通, 我只觉得他们吵闹。
  • 相关阅读:
    ◆ C++中通过溢出覆盖虚函数指针列表执行代码
    关于在OnTimer中连续弹出对话框的讨论
    SetTimer
    Windows内核对象
    日志收缩
    暴力求值
    低级问题
    函数限制
    字符串找字段和表
    android错误提示说明汇总
  • 原文地址:https://www.cnblogs.com/zhlabcd/p/10859053.html
Copyright © 2011-2022 走看看