除了内存管理,QObject的父级用于什么?

时间:2016-05-27 13:25:30

标签: c++ qt memory

我知道,当QObject被摧毁时,它也会摧毁它的所有孩子。但是,在我最近的所有Qt代码中,我一直在声明任何类的成员(例如,QMainWindow)作为直接成员,而不是指针成员,这使得Qt的内存管理很少(如果有的话)有用

那么,QObjects的这个育儿属性是用于别的吗? 从文档中,不清楚QBoxLayout::addWidget()是否取得了窗口小部件的所有权(我认为它没有)。(当您向布局添加窗口小部件时,their parent will be set to the parent of the layout ,正如thuga所指出的那样。)

1 个答案:

答案 0 :(得分:3)

还有其他一些用途:

  • 使用moveToThread()时,整个对象树会被移动,而不仅仅是被推送的对象(否则,内存管理变得不可能);
  • QWidget使用新语义扩展父/子关系,例如:
    • 子坐标相对于父窗口小部件;
    • 父窗口小部件会将其子窗体剪切为自己的几何体;
    • 兄弟小部件的顺序决定了它们的z排序(堆叠);
    • 未处理的鼠标/键盘事件在层次结构中向上传播;
    • 顶级窗口小部件的父级将使该顶级共享成为相同的任务栏条目,并显示在父级顶部(典型案例:对话框)。