2012-01-28 3 views
2

벡터의 벡터를 포함하는 고유 한 클래스를 만들었습니다. 각 클래스에는 사용자 정의 QGraphcsItem (차트)이 있습니다. 나는 실행 취소/다시 실행 기능을 만들려고 시도하고 있으며, 취하고있는 접근법은 스택을 사용하여 차트의 각 상태를 유지하는 것입니다. 내가 생각하고 두 가지 방법은 다음과 같습니다 Qt C++ - 객체 복제

  1. 차례로 다음 모든 QGraphicsItems를 복제 할 필요가 그 안에있는 모든 하위 벡터를 복제 할 필요가 최상위 레벨 QVector의 복제를 만듭니다. 기본 QVector를 복제 할 수 있고 (내부의 모든 것을 본질적으로 복제 할 수 없다면 현재 내부의 모든 것이 포인터입니다.) 각 차원을 반복하면서 외부 루프에 대한 QVector를 만든 다음 내부 루프에 QGraphicsItem을 복제 할 수 있습니다.

  2. 기본적으로 차트를 직접 복제하는 대신 차트의 현재 상태에서 새 QVector를 빌드하십시오. 각 QGraphicsItem에는 필요한 모든 속성을 가져 오는 get/set 함수가 있으므로 새로운 최상위 QVector, 각 행에 대해 새 QVector를 만드는 외부 루프, 새 QGraphicsItems를 만드는 내부 루프 및 원래 속성을 설정하기 만하면됩니다. 차트.

내부적으로 모든 항목을 복제하는 하나의 항목을 복제하는 간단한 방법이 있습니까? 아니면 기본적으로 내 자신의 복제 기능을 구현하고 현재 상태를 "다시 빌드"해야합니까?

+0

Qt에는 실행 취소/다시 실행이 있습니다. 읽었습니까? http://developer.qt.nokia.com/doc/qt-4.8/qundo.html – borges

+0

'QGraphcsItem'은 사용할 수 없습니다. – Lol4t0

답변

2

의견을 보내 주셔서 감사합니다. Qt 실행 취소/다시 실행에 대해 전혀 알지 못했습니다. 나는 약간 더 많은 통제를 위해 자기 자신을 구현하는 것을 끝내었다.

비슷한 문제가있는 다른 사람들을 나중에 참조 할 수 있도록 QGraphicsItems로 채워진 차트의 "상태"를 유지하기위한 새로운 2D Vector를 만들어 보았습니다. 차트가 업데이트 될 때마다 10,000 개의 새로운 QGraphicsItems를 생성하고 현재 10,000을 제거하고 새 10,000을 추가하는 것이 참을 수 없을 정도로 느린 것까지 차트가 그렇게 큰 크기가 될 때까지 이것은 처음에 효과가있었습니다.

대신 QGraphicItem 자체가 아니라 차트 상태의 속성 (QColor, 문자열 등)을 보유한 2DVector를 저장하도록 변경했습니다. 이를 통해 차트를 완전히 다시 작성하는 대신 차트를 업데이트 할 수있었습니다.