내 도구에서이 기능을 구현하기 위해 참조로 QT 실행 취소 프레임 워크 예제를 사용하고있었습니다. 그러나 항목의 소멸자를 호출하는 방법에 버그가있는 것으로 보입니다.Qt 실행 취소 프레임 워크 예제 : 항목 추가/제거
QGraphicsScene은 장면에있는 동안 아이템 소유권을 갖게됩니다. 그러나 AddCommand 및 RemoveCommand는 장면에서 항목을 제거 할 때이 항목의 소유권을 가져야합니다.
Qt 실행 취소 프레임 워크 예제에서 AddCommand는 소멸자에서 개체를 삭제하려고 시도하지만 항목이 아직 장면에있는 경우에는 수행하지 않습니다. 우리는 (실행 취소 한계를 사용하는 경우) 스택을두고 해당 AddCommand 객체 후 현장에서 항목을 제거하면이 경우
AddCommand::~AddCommand()
{
if (!myDiagramItem->scene())
delete myDiagramItem;
}
는 항목이 RemoveCommand 소멸자 그것을하지 않기 때문에 다시 삭제되지 않습니다 .