我有一个指向QGraphicsItems的指针向量,它们都被添加到QGraphicsLinearLayout。
我担心内存管理。
1)添加时会发生什么? 他们是自动获得父级还是我需要显式调用item.setParentLayoutItem(layout)?
2)如果他们是父母,Qt会处理他们的删除吗? (当父母被删除时)
3)我还有一个删除方法,从我的矢量和布局中删除项目。我应该在删除它/调用vector.erase(...)之前从布局中删除该项...还是这取决于我是否是父级?
答案 0 :(得分:0)
1)添加时会发生什么?他们是自动获得父母还是 我是否需要显式调用item.setParentLayoutItem(layout)?
来自qt文档:
如果该项继承QGraphicsItem和QGraphicsLayoutItem(例如 正如QGraphicsWidget所做的那样,该项目实际上是两个所有权的一部分 层次结构。此属性通知布局应该对其执行的操作 子项目被破坏时。在QGraphicsWidget的情况下,它 首选,当删除布局时,它不会删除它 子项(因为它们也是图形项层次结构的一部分)。
请参阅ownedByLayout和setOwnedByLayout
理论上它们是,但您可以使用上面两个链接提供的文档来参数化删除。
2)如果他们是父母,Qt会处理他们的删除吗?
是
3)我还有一个删除方法,从我的向量中删除项目 和布局。我应该之前从布局中删除该项目 删除它/调用vector.erase(...)......或者这取决于 我是否是父母?
如果您的QGraphicsLayoutItem
拥有(父/子关系)所有QGraphicsItem
,则在删除父项时都会删除它们。
如果要删除单个元素,则只需调用:
theItemYouWantToDelete->deleteLater()
应该足够了。