У меня есть пользовательский элемент, который наследует QGraphicsItem. Он имеет несколько дочерних графических элементов в качестве переменных-членов. В каком порядке я должен удалить эти предметы со сцены и как их удалить?
Создайте графические элементы вашего члена, как это:
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 перед уничтожением элемента.
Других решений пока нет …