フェルマータ

個人用のメモ。ソフトウェアの導入とかが多くなる予定。ライセンスの気になる方はこのブログに載せたコードは修正 BSD に準ずるものと考えてください。

Qt の QUndoStack の挙動

ポエム

 Qt には Undo framework があり、 QUndoStackQUndoCommand を積んでいけば、いい感じに undo, redo できるようになる。 このときメモリが解放されるのかなど若干動作に癖というか、細かい部分の挙動の記述が少ないので記事にしておく。

github.com

挙動の確認は動かすのが面倒なので実際のコードを見た。ヘルプ書いてあっても英語だしあんま変わんないんだよね。

メモリ解放

 QUndoStack は以下のときにメモリ解放をしている。

  • push 時に、 redo 側に残されたコマンド
  • デストラクタ実行時に登録されているコマンド

つまり自前で QUndoCommand のメモリ管理はせずに QUndoStack に突っ込んでおけば良い。

push 時の挙動

 確信が無かったので調べたけど、 QUndoStackQUndoCommandpush した際に一発 redo を呼んでいる。 Command と同様の操作をする必要はない。まあそれもそうか。