3

我有一个继承 QGraphicsItem 的自定义项目。它有一些子图形项作为成员变量。我应该按什么顺序从场景中删除这些项目以及如何删除它们?

4

1 回答 1

7

像这样创建您的成员图形项目:

class MyClass : public QGraphicsItem
{
    ...
private:
    
    SomeKindOfGraphicsItem* _item1;
    SomeOtherGraphicsItem* _item2;
}

MyClass::MyClass( ... ) :
    QGraphicsItem( ... ),
    _item1( new SomeKindOfGraphicsItem( ..., this ) ),
    _item2( new SomeOtherGraphicsItem( ..., this ) )
{
    ...
}

MyClass在这种情况下,只需从场景中移除父项(在此示例中)就足够了。这也将删除所有子项:

无效 QGraphicsScene::removeItem(QGraphicsItem * item)

从场景中移除项目项及其所有子项。项目的所有权被传递给调用者(即,QGraphicsScene 在销毁时将不再删除项目)。

此外,当一个对象MyClass被删除时,它会通过Qt机制删除其所有子对象:

QGraphicsItem::~QGraphicsItem() [虚拟]

销毁 QGraphicsItem 及其所有子项。如果该项目当前与场景相关联,则该项目将在删除之前从场景中移除。

注意:在销毁项目之前从 QGraphicsScene 中删除项目更有效。

于 2013-01-21T12:25:54.820 回答