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

标签 c++ qt memory

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

那么,这是 QObjects 的父属性吗?用于别的东西? 从文档中,不清楚 QBoxLayout::addWidget()拥有小部件的所有权(我认为它没有)。(当您将小部件添加到布局时, their parent will be set to the parent of the layout ,如 thuga 所指出的)。

最佳答案

我想到了其他用途:

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

关于c++ - 除了内存管理,QObject 的父对象还有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484696/

相关文章:

c++ - AVX2 的 _mm256_cmp_epi32_mask 的模拟

c++ - 使用 chrono 测量性能,顺序似乎很重要,尽管它不应该

安卓:内存不足

c++ - 如何分配一个结构然后增加它的大小?

c++ - 当为将放入数组的字符串列表动态分配内存时,是否可以在程序的后面添加到该列表?

c++ - Doxygen:使用 C++ 和 VHDL 的项目的无缝文档

c++ - 如何为 QGraphicsSimpleTextItem (Qt C++) 设置背景?

qt - 是否可以保证在 QObject::disconnect() 之后没有信号从不同的线程传递?

c++ - 使用 qt creator 进行 jit 调试 (Windows)

c++ - 在一个线程上删除具有数百万个字符串的大型 HashMap 会影响另一个线程的性能