Как удалить QGraphicsItem, у которого есть дочерние элементы в качестве члена?

У меня есть пользовательский элемент, который наследует QGraphicsItem. Он имеет несколько дочерних графических элементов в качестве переменных-членов. В каком порядке я должен удалить эти предметы со сцены и как их удалить?

3

Решение

Создайте графические элементы вашего члена, как это:

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)

Удаляет элемент предмета и все его дочерние элементы со сцены. Право собственности на элемент передается вызывающей стороне (то есть QGraphicsScene больше не будет удалять элемент при уничтожении).

Кроме того, когда объект MyClass удаляется, он удалит всех своих детей через Qt механика:

QGraphicsItem :: ~ QGraphicsItem () [virtual]

Уничтожает QGraphicsItem и все его дочерние элементы. Если этот элемент в настоящее время связан со сценой, этот элемент будет удален со сцены до его удаления.

Примечание: более эффективно удалить элемент из QGraphicsScene перед уничтожением элемента.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]