2017-03-18 5 views
0

저는 QGraphicsLinearLayout에 모두 추가 된 QGraphicsItems에 대한 포인터 벡터를 가지고 있습니다.Qt QGraphicsLinearLayout에 추가 될 때 QGraphicsItems에 어떤 일이 발생합니까?

메모리 관리가 걱정됩니다.

1) 추가 할 때 어떻게됩니까? 부모가 자동으로 parenting되는지 또는 명시 적으로 item.setParentLayoutItem (레이아웃)을 호출해야합니까?

2) 부모가 있다면 Qt가 삭제 작업을 처리합니까? (부모가 삭제 될 때)

3) 또한 내 벡터 및 레이아웃에서 항목을 제거하는 제거 방법이 있습니다. 삭제하기 전에 레이아웃에서 항목을 제거해야합니까/vector.erase (...)를 호출할까요 ... 아니면 부모님의 여부에 달려 있습니까?

답변

0

1) 추가 할 때 어떻게됩니까? 부모가 자동으로 부모가되거나 item.setParentLayoutItem (레이아웃)을 명시 적으로 호출해야합니까? Qt는 문서에서

:

항목을 상속하는 경우 QGraphicsItem 및 QGraphicsLayoutItem 모두 (예 : QGraphicsWidget가하는대로) 항목이 정말이 개 소유 계층 구조의 일부입니다. 이 속성은 소멸 될 때 자식 항목으로 레이아웃이 수행해야하는 작업을 알립니다. QGraphicsWidget의 경우 레이아웃이 삭제 될 때 하위 항목이 삭제되지 않으므로 (그래픽 항목 계층 구조의 일부이기도하므로) 이 선호됩니다.

ownedByLayout

이론적으로 그들이 setOwnedByLayout 볼 수 있지만, 당신은 위의 두 개의 링크가 제공하는 문서와 삭제를 매개 변수화 할 수 있습니다.

2) 부모가있는 경우 Qt가 삭제를 처리합니까?

3) 나는 또한 내 벡터 레이아웃에서 항목을 제거하는 제거 방법이있다. 삭제하기 전에 레이아웃에서 항목을 제거해야합니까?/vector.erase (...) ... 호출하거나 에 의존합니까?

당신의 QGraphicsLayoutItem이 (부모/자식 관계)를 소유 한 경우 모든 QGraphicsItem, 부모가 삭제 될 때 그들은 모두 삭제됩니다. 당신은 하나의 요소에 다음 간단한 호출을 제거하려면

:

theItemYouWantToDelete->deleteLater() 

충분합니다.