Überblick über das Undo-Framework von Qt
Einführung
Das Undo-Framework von Qt ist eine Implementierung des Command-Patterns, um Undo/Redo-Funktionalität in Anwendungen zu implementieren.
Das Command-Pattern basiert auf der Idee, dass die gesamte Bearbeitung in einer Anwendung durch das Erstellen von Instanzen von Command-Objekten erfolgt. Befehlsobjekte wenden Änderungen auf das Dokument an und werden in einem Befehlsstapel gespeichert. Darüber hinaus weiß jeder Befehl, wie er seine Änderungen rückgängig machen kann, um das Dokument in seinen vorherigen Zustand zurückzubringen. Solange die Anwendung nur Befehlsobjekte verwendet, um den Zustand des Dokuments zu ändern, ist es möglich, eine Folge von Befehlen rückgängig zu machen, indem man den Stapel von oben nach unten durchläuft und die Rückgängig-Funktion für jeden Befehl aufruft. Es ist auch möglich, eine Folge von Befehlen wiederherzustellen, indem man den Stapel nach oben durchläuft und redo für jeden Befehl aufruft.
Klassen
Das Framework besteht aus vier Klassen:
- QUndoCommand ist die Basisklasse aller Befehle, die auf einem Undo-Stack gespeichert sind. Sie kann eine einzelne Änderung im Dokument anwenden (redo) oder rückgängig machen.
- QUndoStack ist eine Liste von QUndoCommand Objekten. Sie enthält alle auf dem Dokument ausgeführten Befehle und kann den Zustand des Dokuments durch Rückgängigmachen oder Wiederherstellen rückwärts oder vorwärts rollen.
- QUndoGroup ist eine Gruppe von Rückgängig-Stapeln. Sie ist nützlich, wenn eine Anwendung mehr als einen Undo-Stapel enthält, typischerweise einen für jedes geöffnete Dokument. QUndoGroup bietet ein einzelnes Paar von Undo/Redo-Slots für alle Stapel in der Gruppe. Es leitet Rückgängig- und Wiederherstellungsanfragen an den aktiven Stapel weiter, d. h. an den Stapel, der mit dem Dokument verknüpft ist, das gerade vom Benutzer bearbeitet wird.
- QUndoView ist ein Widget, das den Inhalt eines Rückgängig-Stapels anzeigt. Wenn Sie auf einen Befehl in der Ansicht klicken, wird der Zustand des Dokuments zu diesem Befehl vor- oder zurückgespult.
Konzepte
Die folgenden Konzepte werden von dem Framework unterstützt:
- Sauberer Zustand: Wird verwendet, um zu signalisieren, wenn das Dokument in einen Zustand eintritt und diesen verlässt, der auf der Festplatte gespeichert wurde. Dies wird typischerweise verwendet, um die Speicheraktionen zu deaktivieren oder zu aktivieren und um die Titelleiste des Dokuments zu aktualisieren.
- Befehlskomprimierung: Wird verwendet, um Befehlsfolgen zu einem einzigen Befehl zu komprimieren. Ein Beispiel: In einem Texteditor können die Befehle, die einzelne Zeichen in das Dokument einfügen, zu einem einzigen Befehl komprimiert werden, der ganze Textabschnitte einfügt. Diese größeren Änderungen sind für den Benutzer bequemer rückgängig zu machen und wiederherzustellen.
- Befehlsmakros: Eine Folge von Befehlen, die alle in einem Schritt rückgängig gemacht oder wiederhergestellt werden. Sie vereinfachen das Schreiben einer Anwendung, da eine Reihe von einfacheren Befehlen zu komplexeren Befehlen zusammengesetzt werden kann. Zum Beispiel kann ein Befehl, der eine Reihe ausgewählter Objekte in einem Dokument verschiebt, durch die Kombination einer Reihe von Befehlen erstellt werden, von denen jeder ein einzelnes Objekt verschiebt.
QUndoStack bietet praktische Rückgängig- und Wiederherstellungsobjekte QAction, die in ein Menü oder eine Symbolleiste eingefügt werden können. Die Texteigenschaften dieser Aktionen geben immer an, welcher Befehl rückgängig gemacht oder wiederhergestellt wird, wenn sie ausgelöst werden. In ähnlicher Weise bietet QUndoGroup Rückgängig- und Wiederherstellungsaktionen, die sich immer wie die Rückgängig- und Wiederherstellungsaktionen des aktiven Stapels verhalten.
© 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.