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シーンから親アイテム (この例では) だけを削除するだけで十分です。これにより、すべての子アイテムも削除されます。

void QGraphicsScene::removeItem(QGraphicsItem * アイテム)

item item とそのすべての子をシーンから削除します。item の所有権は呼び出し元に渡されます (つまり、QGraphicsScene は破棄されたときにアイテムを削除しなくなります)。

また、 のオブジェクトMyClassが削除されると、Qtメカニズムによってそのすべての子が削除されます。

QGraphicsItem::~QGraphicsItem() [仮想]

QGraphicsItem とそのすべての子を破棄します。このアイテムが現在シーンに関連付けられている場合、アイテムは削除される前にシーンから削除されます。

注: アイテムを破棄する前に QGraphicsScene からアイテムを削除する方が効率的です。

于 2013-01-21T12:25:54.820 に答える