2017-03-18 29 views
0

我有一个指向QGraphicsItems的指针矢量,它们都被添加到QGraphicsLinearLayout中。Qt QGraphicsItems添加到QGraphicsLinearLayout时会发生什么

我很担心内存管理。

1)我添加它们会发生什么? 它们是否自动获得父项,或者是否需要显式调用item.setParentLayoutItem(layout)?

2)如果他们是父母Qt处理他们的删除? (当父母被删除时)

3)我也有一个删除方法,从我的向量和布局中删除项目。我应该从布局中删除项目之前删除/调用vector.erase(...)...或这取决于我是否parented?

回答

0

1)当我添加它们时会发生什么?他们是否自动获得父项或 是否需要显式调用item.setParentLayoutItem(layout)?

从Qt文档:

如果该项目继承了的QGraphicsItem和QGraphicsLayoutItem(例如 如QGraphicsWidget做)的项目实际上是两个拥有 层次结构的一部分。该属性通知在布局被破坏时,布局应该如何处理它的 子项目。在QGraphicsWidget的情况下,它首选 ,当布局被删除时,它不会删除它的 子元素(因为它们也是图形项目层次结构的一部分)。

看到ownedByLayoutsetOwnedByLayout

理论上是这样,但你可以用参数通过上述两个链接提供的文件删除。

2)如果他们是父母Qt处理他们的删除?

3)我也有一个删除方法,从我的矢量 和布局中删除的项目。我应该删除它之前 删除它/调用vector.erase(...)...或这是否取决于 布局中项目从布局是否父亲或不?

如果您QGraphicsLayoutItem拥有(父母/子女关系),所有的QGraphicsItem,他们会当父被删除所有被删除。

如果你想删除一个单一的元素,那么一个简单的调用:

theItemYouWantToDelete->deleteLater() 

应该足够了。

相关问题