除了内存管理,QObject的父对象还有什么作用?

3
我知道当 QObject 被销毁时,它也会销毁其所有子项。但是,在我的最近的 Qt 代码中,我总是将任何类的成员(比如 QMainWindow)声明为直接成员,而不是指针成员,这使得 Qt 的内存管理很少有用(如果有的话)。
那么,QObjects 的这种父子关系属性是否用于其他方面呢?从文档中看不清 QBoxLayout::addWidget() 是否拥有小部件(我认为不是)。当您将小部件添加到布局中时,它们的父对象将设置为布局的父对象, 如 thuga 所指出的。

3
当您将小部件添加到布局中时,它们的父级将被设置为该布局的父级(即包含该布局的控件)。 - thuga
3
除了销毁的原因外,将父对象设置为一个很好的理由是当您将对象移动到新线程时。当您将对象移动到新线程时,它也会将其所有子对象一起移动到新线程中。 - thuga
你在使用Qt类时不够惯用。我建议按照文档的建议使用Qt类。 - gomons
1个回答

3

以下是其他一些相关用途:

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

换句话说,在文档中阅读类描述真的非常有帮助 :) RTFMB - dtech

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接