Qt添加到QGraphicsLinearLayout时QGraphicsItems会发生什么

时间:2017-03-18 00:24:48

标签: c++ qt qgraphicsitem

我有一个指向QGraphicsItems的指针向量,它们都被添加到QGraphicsLinearLayout。

我担心内存管理。

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

来自qt文档:

  

如果该项继承QGraphicsItem和QGraphicsLayoutItem(例如   正如QGraphicsWidget所做的那样,该项目实际上是两个所有权的一部分   层次结构。此属性通知布局应该对其执行的操作   子项目被破坏时。在QGraphicsWidget的情况下,它   首选,当删除布局时,它不会删除它   子项(因为它们也是图形项层次结构的一部分)。

请参阅ownedByLayoutsetOwnedByLayout

理论上它们是,但您可以使用上面两个链接提供的文档来参数化删除。

  

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

  

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

如果您的QGraphicsLayoutItem拥有(父/子关系)所有QGraphicsItem,则在删除父项时都会删除它们。

如果要删除单个元素,则只需调用:

theItemYouWantToDelete->deleteLater()

应该足够了。