2013-03-03 12 views
5

Sto imparando a utilizzare Qt per lo sviluppo della mia applicazione & Sono abbastanza riuscito nello sviluppo della mia Applicazione. Ora voglio implementare funzionalità Annulla Ripristina per la mia applicazione. Il doc per questo argomento ha poche informazioni. Ho persino provato a capire dai 2 esempi dell'SDK. Ma mi sto divertendo a capire come funziona. Qualcuno si può prendere la briga di spiegarmi come implementarlo? Nella mia applicazione ci sono vari stati per i quali voglio fornire questa funzionalità. Quindi la spiegazione può essere dal punto di vista generale? Se ci sono già articoli su internet che spiegano lo stesso, per favore informami di loro. Questo sarebbe molto utile. Grazie.Impossibile comprendere Annulla Redo Framework in Qt

+0

Cosa non capisci? Classi specifiche? Panoramica? – Synxis

+0

Posso capire le 4 classi e qual è il loro scopo, ma non so come usarle, come ad esempio QUndoCommand. –

risposta

8

Ci sono 2 classi principali: QUndoCommand e QUndoStack;

  1. QUandoCommand è la classe base della classe di comando. Devi implementare undo() e redo() te stesso.
  2. QUndoStack è fondamentalmente un contenitore di oggetti QUndoCommand, con metodi extra, come la creazione di QAction, interrogare undo/redo testo del QUndoCommand corrente (funzionalità semplici che lei stesso può implementato facilmente)

Quello che dovete fare è:

  1. Implementare i comandi. È necessario decidere come implementare la ripetizione/annullamento in base alle proprie esigenze. class AppendText è un buon esempio: http://qt-project.org/doc/qt-5.0/qtwidgets/qundocommand.html
  2. Conserva un'istanza QUndoStack per ogni documento (o un'istanza se nell'applicazione è presente un solo documento).
  3. Supponiamo di avere una classe di comando "AppendText" e un pulsante "Aggiungi" nell'interfaccia utente. Se si fa clic sul pulsante "Aggiungi", è necessario creare un'istanza del comando AppendText e chiamare QUndoStack :: push (appendCmd). QUndoStack :: push() chiamerà AppendText :: redo() prima e poi lo metterà nel contenitore per annullare.

Questo è tutto.

+1

Yup Ho capito alcuni frammenti ma non riesco a capire perché dovrei usare Qt Undo Redo Framework allora? Non sarebbe più conveniente implementare la mia classe che ha tutta la cronologia della sessione e poi annullare/ripristinare secondo lo stato? Tutto quello che voglio chiedere è ciò che ottengo dal framework integrato di Qt rispetto al mio framework personalizzato per la mia applicazione? –

+1

Per le app semplici, il framework di annullamento di qt può far risparmiare molto tempo. Ma se hai una soluzione migliore per il tuo caso, fallo. Non c'è nulla di misterioso in qt annullare il framework che ti costringe a usarlo. – Chen

+0

ok grazie per l'aiuto. –