gpt4 book ai didi

c++ - QObject 使用 setParent() 将 QList 设置为父级

转载 作者:行者123 更新时间:2023-11-28 07:39:19 25 4
gpt4 key购买 nike

我正在尝试使用 QObject 树删除机制来删除列表和存储在列表中的所有 QObject。 Qt 仍然是我的一周区域...

QList<QObject*>* list = new QList<QObject*>();
QObject* obj1 = new QObject();
QObject* obj2 = new QObject();
obj1->setParent(obj2);
obj2->setParent((QObject*)list);

我在最后一行得到了“Segmentation fault”。 QList 不能用作父级吗?它不是继承自QObject吗?

编辑:

主要问题 - 是否可以在不扩展 QList 类的情况下方便地删除列表和所有列表元素?这需要由客户端调用,因此必须简单。

我只想打电话:

delete list;

不是

qDeleteAll(list);
delete list;

最佳答案

没有。 QList 不继承自 QObject。如果想轻松删除列表的内容,可以使用qDeleteAll(list)

编辑:这是未经测试的,基类没有虚拟析构函数可能会出现问题 - 但请提前给出。

template < class T >
class MyList : public QList< T >
{
static_assert( std::is_pointer< T >::value,
"T must be a pointer." );
// Constructors...
...
virtual ~MyList() { qDeleteAll( *this ); }
}

关于c++ - QObject 使用 setParent() 将 QList 设置为父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16143201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com