私のツールでこの機能を実装するためのリファレンスとしてQT UNDOフレームワークの例を使用していました。しかし、アイテムのデストラクタを呼び出す方法にバグがあるようです。Qt Undoフレームワークの問題例:アイテムの追加/削除
QGraphicsSceneは、シーン内にあるアイテムの所有権を引き受けることを理解しています。ただし、アンドゥオブジェクト:AddCommandとRemoveCommandは、シーンから削除するときにこれらのアイテムの所有権を引き継ぐ必要があります。
Qt元に戻すフレームワークの例では、AddCommandはデストラクタでオブジェクトを削除しようとしますが、アイテムがまだシーンに残っている場合は削除しません。この場合
AddCommand::~AddCommand()
{
if (!myDiagramItem->scene())
delete myDiagramItem;
}
我々は(アンドゥの上限を使用している場合)スタックを離れる対応AddCommandオブジェクトの後にシーンから項目を削除する場合RemoveCommandデストラクタはそれをしていないので、アイテムは再び削除されません。