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

Besides memory management, what's a QObject's parent used for?

本文关键字:什么 管理 内存 QObject      更新时间:2023-10-16

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

那么,QObjects的这种育儿属性是否用于其他事情?从文档中,尚不清楚QBoxLayout::addWidget()是否拥有小部件的所有权(我认为它没有)。(当您将小部件添加到布局时,它们的父级将设置为布局的父级,正如 thuga 指出的那样)。

还有其他用途浮现在脑海中:

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