如何删除有一些子项作为成员的QGraphicsItem?

时间:2013-01-21 12:04:04

标签: c++ qt qgraphicsitem

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

1 个答案:

答案 0 :(得分:6)

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

class MyClass : public QGraphicsItem
{
    ...
private:

    SomeKindOfGraphicsItem* _item1;
    SomeOtherGraphicsItem* _item2;
}

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

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

  

void QGraphicsScene :: removeItem(QGraphicsItem * item)

     

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

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

  

QGraphicsItem :: ~QGraphicsItem()[虚拟]

     

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

     

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