Qt;Q删除和删除小部件.setParent(NULL)是必需的
Qt; QWidget removal and deletion. setParent(NULL) necessary?
我一直在阅读Qwidgets的所有权并删除它们。例如:http://qt-project.org/doc/qt-4.8/objecttrees.html
上面写着"你也可以自己删除孩子的对象,他们会从父母那里删除自己"
然而,我看到的很多例子都是在删除父项之前将其设置为null。例如:
if (widget != NULL)
{
layout->removeWidget(widget);
widget->setParent(NULL);
delete widget;
}
是否需要setParent(NULL);
?
从这件事开始,我有什么理由不能做吗
delete layout->itemAt(i);
或
delete layout->takeAt(i);
事实上,后两者之间有什么真正的区别吗?当然,我假设我所有的对象都在堆上。
在删除小部件之前,绝对不需要将其父级设置为NULL
。删除后,子级小部件将自动从其父级注销。
对于第二个问题,itemAt
和takeAt
之间的真正区别在于,itemAt
返回指定的布局项,takeAt
也返回它,但会将它从布局中移除。
使用takeAt
会更改布局项计数,因为它从布局中删除了返回的项。所以要小心,不要在像for ( int i = 0; i != layout->count(); ++i )
这样的循环中使用它,因为你最终会发现i大于当前的layout->count()
。。。
请注意,执行delete layout->itemAt(i);
不会自动从布局中删除已删除的项目,因此必须避免这种情况。
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- 删除对象与将指针设置为 null
- unique_ptr具有右值删除器的构造函数返回 null
- 尝试用C 中的空地址(而非null)删除数组指针
- 当删除NULL指针(C/C )时,可以保证SegFault
- 删除指针并将指针设置为null之间有什么区别
- 当我要删除它时,指针甚至无法设置为null
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- Qt;Q删除和删除小部件.setParent(NULL)是必需的
- 测试答案是错的,对吗?它不会崩溃,因为我们删除NULL指针,这是安全的
- 删除惰性初始化后的null检查
- 检查指针在其他指针中删除对象后是否为 NULL
- 分配内存,并在删除分配之前定义NULL
- NULL指针并将其删除
- 删除null void*指针是未定义的行为吗
- 删除对象会将其引用设置为NULL
- 字符数组中的null是否阻止删除超出该值的内存