可動形状のキャンバスをベースにしたQtアプリを作成してQGraphicsScene
いて、元に戻る機能を統合しようとしています。形状の作成や削除などのほとんどの機能では、QGraphicsScene
それ自体に実装するのはかなり簡単ですが、要素を移動可能にし、移動を元に戻せるようにする必要があります。現在、シーンでラバーバンドドラッグモードを使用し、アイテムItemIsSelectable
でItemIsMovable
フラグを使用しています。QUndoCommand
問題は、形状の動きを表すためにを作成するのに適した場所がないように見えることです。メソッド内でこれを行うと、QGraphicsScene::itemChange
2つ以上の図形を選択して移動すると、異なるオブジェクトに対して別々の元に戻すコマンドがインターリーブされ、マージできなくなるため、元に戻すと予期しない動作が発生します。にイベントはありませんQGraphicsScene
それは私が見ることができるようにそのアイテムが動き回るときに呼ばれるので、私はちょっと立ち往生しています。
私が見た最悪のシナリオはItemIsMovable
、カスタムQGraphicsItem
オブジェクトのフラグを無効にし、QGraphicsScene
マウスイベントで移動を完全に処理することですが、その機能を適切に再実装することは非常に複雑に見えます(Qtが内部でどのように行うかを確認し、コードが非常に多いオブジェクトとその子の一部が両方とも選択されている場合など、複雑なケースを処理する場合)。これは、undoスタックの最も明白なユースケースのようです(undoフレームワークのサンプルプログラムは、QGraphicsScene
複数のオブジェクトの移動がサポートされていないことを除いて、私のようなプログラムです)。したがって、組み込みの方法がないのは奇妙に思えます。コア機能の重要な部分を再実装せずにそれを行うため。誰かがこれを行うプログラムの洞察や例を持っていますか?