QtのUndoフレームワークの概要
はじめに
QtのUndoフレームワークはCommandパターンを実装したもので、アプリケーションにアンドゥ/リドゥ機能を実装するためのものです。
Command パターンは、アプリケーション内のすべての編集はコマンドオブジェクトのインスタンスを作成することによって行われるという考えに基づいています。コマンドオブジェクトはドキュメントに変更を適用し、コマンドスタックに格納されます。さらに、各コマンドは、ドキュメントを以前の状態に戻すために、その変更を取り消す方法を知っています。アプリケーションがドキュメントの状態を変更するためだけにコマンド・オブジェクトを使用する限り、スタックを下方向に走査し、各コマンドに対して順番にアンドゥを呼び出すことで、一連のコマンドを取り消すことが可能です。また、一連のコマンドをやり直すことも可能で、スタックを上方向に走査し、各コマンドに対してやり直しを呼び出します。
クラス
フレームワークは4つのクラスで構成されている:
- QUndoCommand はアンドゥスタックに格納されているすべてのコマンドの基本クラスです。これは、ドキュメントの単一の変更を適用(やり直し)または取り消すことができます。
- QUndoStack は オブジェクトのリストです。文書上で実行されたすべてのコマンドを含み、それらを元に戻したりやり直したりすることで、文書の状態を前後にロールバックすることができます。QUndoCommand
- QUndoGroup はアンドゥスタックのグループです。 。グループ内のすべてのスタックに対して、1組のアンドゥ/リドゥ・スロットを提供します。これはアンドゥとリドゥの要求をアクティブなスタックに転送します。アクティブなスタックとは、ユーザーが現在編集中のドキュメントに関連付けられたスタックのことです。QUndoGroup
- QUndoView はアンドゥスタックの内容を表示するウィジェットです。このビューでコマンドをクリックすると、ドキュメントの状態がそのコマンドまで後退または前進します。
概念
フレームワークでは以下の概念がサポートされています:
- クリーンな状態:クリーン・ステート:ドキュメントがディスクに保存された状態に入るときと、ディスクに保存された状態から出るときのシグナルに使用されます。これは通常、保存アクションを無効にしたり有効にしたり、ドキュメントのタイトルバーを更新するために使用されます。
- コマンド圧縮:一連のコマンドを1つのコマンドに圧縮するために使われます。例えばテキストエディタでは、個々の文字を文書に挿入するコマンドを、テキストのセクション全体を挿入する単一のコマンドに圧縮することができます。このような大きな変更は、ユーザーが元に戻したりやり直したりするのに便利です。
- コマンドマクロ:一連のコマンドのことで、すべて一度に取り消したりやり直したりできる。単純なコマンドのセットをより複雑なコマンドにまとめることができるため、アプリケーションを書く作業が簡単になる。例えば、ドキュメント内の選択されたオブジェクトのセットを移動するコマンドは、それぞれが単一のオブジェクトを移動するコマンドのセットを組み合わせることによって作成することができます。
QUndoStack は、メニューやツールバーに挿入できる便利なアンドゥとリドゥ オブジェクトを提供します。これらのアクションのテキストプロパティは、それらがトリガーされたときにどのコマンドが元に戻されるか、またはやり直されるかを常に反映します。同様に、 は、常にアクティブなスタックのアンドゥとリドゥアクションのように動作するアンドゥとリドゥアクションを提供します。QAction QUndoGroup
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.