2012-09-19 2 views
1

QT 라이브러리 및 QGraphicsScene을 실험 중입니다. 장면에 내 자신의 개체를 추가 할 수 있습니다. 지금 내가 갖고 싶은 것은 QGraphicsScene 외부의 목록입니다. 사각형, 원 및 삼각형을 가정 해 보겠습니다. 그들은 모두 장면에 살며, 내가 맞으면 장면을 추가 할 때 장면에 의해 복사되고 소유됩니다.C++ QGraphicsItem에 대한 포인터 목록

질문 : 어떤 종류의 목록 템플릿 컨테이너가 내 외부 목록을 구현하는 데 가장 좋을까요?

그들은 포인터가 될 것 같아서 내가 boost::ptr_container이라고 생각했습니다. 항목을 삭제하기 시작하면 목록이 화면과 일치하는지 확인하는 시스템이 필요하다는 것을 알고 있습니다. 이는 장면에서 객체를 제거하기 바로 전에 목록에서 포인터를 제거한다는 의미입니다.

이 시스템을 어떻게 구축해야하는지에 대한 아이디어는 매우 좋을 것입니다.

답변

1

당신은 그것을 필요로하지 않습니다. Qt가 당신을 위해 모든 것을합니다.

QGraphicsScene에 항목을 추가하면 장면의 항목 소유권이 적용됩니다. 즉, 장면은 항목을 저장하고 필요할 때 항목이 차지하는 메모리를 확보하는 것을 의미합니다 (대개 deleteItem()로 항목을 수동으로 삭제하거나 장면 자체가 삭제 된 경우).

MyGraphicScene.items(); 

이 기능은 같은 장면의 모든 항목에 대한 포인터의 목록을 반환 : 당신이 items() 함수를 호출하여 장면에 추가 된 모든 항목의 목록을 요청할 수 있습니다 할 때마다

a QList< QGraphicsItem * >, 정확히 필요한 것입니다.

+0

안녕 답변 해 주셔서 감사합니다. 예, 항목()을 사용하여 모든 항목을 가져올 수 있음을 알고 있습니다. 그러나 모든 "사각형"또는 "마우스"또는 무엇이든을 가져와야하는 경우에는 어떻게해야합니까? 장면에 1000 개 이상의 항목이 포함될 수 있습니다. 상자와 원형이있는 장면이 있다고 가정 해 보겠습니다. 만약 모든 상자의 크기를 바꾸고 싶지만 원이 아닌 –

+0

@Artis라면,이 경우에는'QList'가 할 것입니다. 실제로,'QList'는 당신이 특별한 행동 (예를 들어,'QMap'에서 키로 검색하는 것)을 원하지 않는 한, 대부분의 시간을 선택해야하는 컨테이너입니다. – SingerOfTheFall