2013-03-03 2 views
5

Ich lerne Qt für meine Anwendungsentwicklung zu verwenden & Ich bin ziemlich erfolgreich bei der Entwicklung meiner Anwendung. Jetzt möchte ich die Undo Redo Funktionalität für meine Anwendung implementieren. Die doc für dieses Thema hat wenig Informationen. Ich habe sogar versucht, aus den 2 Beispielen im SDK zu verstehen. Aber es fällt mir schwer zu verstehen, wie es funktioniert. Kann sich jemand bitte die Mühe machen, mir zu erklären, wie man es implementiert? Es gibt verschiedene Zustände in meiner Anwendung, für die ich diese Funktionalität bereitstellen möchte. Kann die Erklärung von der allgemeinen Sichtweise sein? Wenn es bereits Artikel im Internet gibt, die das gleiche erklären, dann benachrichtige mich bitte darüber. Das wäre sehr hilfreich. Danke.Nicht nachvollziehbar Rückgängig Redo Framework in Qt

+0

Was verstehst du nicht? Spezifische Klassen? Überblick ? – Synxis

+0

Ich kann die 4 Klassen verstehen und was ihr Zweck ist, aber ich weiß nicht, wie man sie benutzt, wie zB QndoCommand. –

Antwort

8

Es gibt zwei Hauptklassen: QUndoCommand und QUndoStack;

  1. QUndoCommand ist die Basisklasse Ihrer Befehlsklasse. Sie müssen undo() und redo() selbst implementieren.
  2. QUndoStack ist im Grunde ein Container von QUndoCommand Objekte, mit zusätzlichen Methoden wie das Erstellen QAction, Abfrage Undo/Redo Text der aktuellen QUndoCommand (Simple Funktionalitäten, die Sie sich leicht implementieren kann)

Was Sie tun müssen, ist:

  1. Implementieren Sie Ihre Befehle. Sie müssen entscheiden, wie Sie sich nach Ihren Bedürfnissen redo/rückgängig machen können. Klasse AppendText ist ein gutes Beispiel: http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
  2. Halten Sie eine QUndoStack-Instanz für jedes Dokument (oder eine Instanz, wenn es nur ein Dokument in der Anwendung gibt).
  3. Angenommen, Sie haben eine Befehlsklasse "AppendText" und eine Schaltfläche "Anhängen" in der Benutzeroberfläche. Wenn auf die Schaltfläche "Anhängen" geklickt wird, müssen Sie eine AppendText-Befehlsinstanz erstellen und QUndoStack :: push (appendCmd) aufrufen. QUndoStack :: push() wird zuerst AppendText :: redo() aufrufen und dann zum Rückgängigmachen in den Container einfügen.

Das ist es.

+1

Yup Ich verstand ein paar Teile, aber ich kann nicht verstehen, warum würde ich dann das Qt Undo Redo Framework verwenden? Wäre es nicht bequemer, meine eigene Klasse zu implementieren, die die gesamte Geschichte der Sitzung & dann rückgängig machen/wiederherstellen je nach Zustand? Alles, was ich fragen möchte, ist, was ich von Qt's eingebautem Framework bekomme, verglichen mit meinem eigenen Framework, das für meine Anwendung angepasst wurde? –

+1

Für einfache Anwendungen kann das Rückgängig-Framework von Qt viel Zeit sparen. Aber wenn Sie eine bessere Lösung für Ihren Fall haben, gehen Sie einfach dafür. Es gibt nichts mysteriöses in Qt Rückgängig Framework, das Sie zwingen, es zu verwenden. – Chen

+0

ok danke für die Hilfe. –