QGraphicsItem을 상속받은 사용자 지정 항목이 있습니다. 일부 하위 그래픽 항목이 멤버 변수로 있습니다. 장면에서 이러한 항목을 제거해야하는 순서와 삭제 방법은 무엇입니까?일부 하위 항목을 구성원으로 갖는 QGraphicsItem을 삭제하는 방법은 무엇입니까?
답변
은 다음과 같이 귀하의 회원 그래픽 항목을 만들기 :이 경우
class MyClass : public QGraphicsItem
{
...
private:
SomeKindOfGraphicsItem* _item1;
SomeOtherGraphicsItem* _item2;
}
MyClass::MyClass(...) :
QGraphicsItem(...),
_item1(new SomeKindOfGraphicsItem(..., this)),
_item2(new SomeOtherGraphicsItem(..., this))
{
...
}
, 현장에서 오직 상위 항목 (이 예에서는 MyClass
)를 제거하기에 충분하다. 이뿐만 아니라 모든 하위 항목을 제거합니다
무효 QGraphicsScene :: removeItem (QGraphicsItem * 항목)
항목 항목과 현장에서 모든 아이를 삭제합니다. 항목의 소유권이 발신자에게 전달됩니다 (예 : QGraphicsScene은 더 이상 삭제할 때 항목을 삭제하지 않습니다).
MyClass
의 객체가 삭제됩니다 때 또한
, 그것은 Qt
역학을 통해 아이들이 모두 삭제됩니다
QGraphicsItem :: ~
파괴한다 [가상] QGraphicsItem() QGraphicsItem과 그 모든 자식들. 이 항목이 현재 장면과 연관되어 있으면 항목이 삭제되기 전에 장면에서 제거됩니다.
참고 : 항목을 삭제하기 전에 QGraphicsScene에서 항목을 제거하는 것이 더 효율적입니다.
소멸자에서 하위 항목을 삭제해야합니까? 그것은 실제로 문제를 일으켰을 수도 있습니다. –
@ fatma.ekici 아니요, 자동으로 발생합니다. 실제로, 만약 수동으로한다면, 프로그램을 망칠 더블 삭제 *가 생깁니다! 그런데 위젯 유형과 다른 QObject 유형도 마찬가지입니다. 그들은 모두 나무 *를 형성합니다. 트리에서 노드를 삭제하면 모든 자식이 * 재귀 적으로 삭제됩니다. 이 프로세스는 Qt에 의해 자동으로 수행됩니다. 부모가 생성자 (이 답변의 코드에있는 멤버 이니셜 라이저 목록의 'this')를 키로 전달하여 트리에 있음을주의해야합니다. – leemes
주 항목의 소멸자에있는 하위 항목은 삭제하지 않습니다. 그러나 mainItem을 장면에서 제거한 후 delete를 호출하면 프로그램이 중단됩니다. –
- 1. QGraphicsScene에서 모든 QGraphicsItem을 삭제하는 방법
- 2. TTreeViewItem에서 모든 하위 항목을 삭제하는 방법은 무엇입니까?
- 3. 업데이트 부모의 하위 항목을 삭제하는 방법은 무엇입니까?
- 4. 마우스로 움직이는 QGraphicsItem을 감지하는 방법은 무엇입니까?
- 5. 하위 QGraphicsItem을 장면에 제한하겠습니까?
- 6. atk4에서 하위/하위 레코드를 삭제하는 방법은 무엇입니까?
- 7. 캘린더 항목을 삭제하는 방법은 무엇입니까?
- 8. 컬렉션에서 항목을 삭제하는 방법은 무엇입니까?
- 9. 기준별로 항목을 삭제하는 방법은 무엇입니까?
- 10. UICollectionView에서 항목을 삭제하는 방법은 무엇입니까?
- 11. Ant의 일부 폴더 아래에있는 모든 하위 폴더를 삭제하는 방법은 무엇입니까?
- 12. QTreeWidget에서 체크 된 항목을 삭제하는 방법은 무엇입니까?
- 13. C++ QGraphicsItem을 열거하는 방법은 무엇입니까?
- 14. Hibernate에서 하위 항목의 ID-S로 항목을 삭제하는 방법은 무엇입니까?
- 15. 최대 절전 모드 @OneToMany에서 하위 항목을 올바르게 삭제하는 방법은 무엇입니까?
- 16. C++ : "const 포인터"를 구성원으로 갖는 목록 VS "const에 대한 포인터"를 구성원으로 갖는 목록
- 17. drupal에서 cache db 항목을 삭제하는 방법은 무엇입니까?
- 18. MKNetworkKit의 여러 하위 클래스를 갖는 방법은 무엇입니까?
- 19. PHP 함수로 일부 단어를 삭제하는 방법은 무엇입니까?
- 20. itunesconnect에서 inapp 구매 항목을 삭제하는 방법은 무엇입니까?
- 21. 버킷의 모든 항목을 삭제하는 방법은 무엇입니까?
- 22. Listview 및 데이터베이스에서 항목을 삭제하는 방법은 무엇입니까?
- 23. ID를 가져와 테이블에서이 항목을 삭제하는 방법은 무엇입니까?
- 24. TFS 2012에서 작업 항목을 삭제하는 방법은 무엇입니까?
- 25. 모델 뷰에서 항목을 삭제하는 방법은 무엇입니까?
- 26. FormApp 개체에서 모든 항목을 삭제하는 방법은 무엇입니까?
- 27. 조각에서 중복 된 항목을 삭제하는 방법은 무엇입니까?
- 28. graphql에서 여러 항목을 삭제하는 방법은 무엇입니까?
- 29. MYSQL에서 항목을 영구히 삭제하는 방법은 무엇입니까?
- 30. JSTL의 목록에서 항목을 삭제하는 방법은 무엇입니까?
회원으로 추가한다고해서 Qt가이 관계를 정의한다는 의미에서 * 어린이 *라는 것을 의미하지 않습니다. 당신은 생성자에서 또는 나중에 childItem-> setParent (this)를 사용하여 children 항목 (즉, 자신 ('this'))에 * parent *를 설정해야합니다. – leemes
이 변수는 멤버 변수이며 기본 항목을 부모로 사용합니다. –
그러면 모든 것이 좋습니다. 그러나이 의견은 미래의 독자들에게 중요 할 수 있습니다. 실수는 쉽게 할 수 있기 때문입니다. – leemes