QUndoCommand Class
La clase QUndoCommand es la clase base de todos los comandos almacenados en un QUndoStack. Más...
| Cabecera: | #include <QUndoCommand> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Funciones públicas
| QUndoCommand(QUndoCommand *parent = nullptr) | |
| QUndoCommand(const QString &text, QUndoCommand *parent = nullptr) | |
| virtual | ~QUndoCommand() |
| QString | actionText() const |
| const QUndoCommand * | child(int index) const |
| int | childCount() const |
| virtual int | id() const |
| bool | isObsolete() const |
| virtual bool | mergeWith(const QUndoCommand *command) |
| virtual void | redo() |
| void | setObsolete(bool obsolete) |
| void | setText(const QString &text) |
| QString | text() const |
| virtual void | undo() |
Descripción detallada
Para una visión general del Framework de Deshacer de Qt, vea el documento de visión general.
Un QUndoCommand representa una única acción de edición en un documento; por ejemplo, insertar o borrar un bloque de texto en un editor de texto. QUndoCommand puede aplicar un cambio al documento con redo() y deshacer el cambio con undo(). Las implementaciones para estas funciones deben ser proporcionadas en una clase derivada.
class AppendText : public QUndoCommand { public: AppendText(QString *doc, const QString &text) : m_document(doc), m_text(text) { setText("append text"); } void undo() override { m_document->chop(m_text.length()); } void redo() override { m_document->append(m_text); } bool mergeWith(const QUndoCommand *other) override; private: QString *m_document; QString m_text; };
Un QUndoCommand tiene asociado un text(). Se trata de una cadena corta que describe lo que hace el comando. Se utiliza para actualizar las propiedades de texto de las acciones de deshacer y rehacer de la pila; véase QUndoStack::createUndoAction() y QUndoStack::createRedoAction().
Los objetos QUndoCommand son propiedad de la pila en la que fueron empujados. QUndoStack borra un comando si ha sido deshecho y se empuja un nuevo comando. Por ejemplo:
MyCommand *command1 = new MyCommand(); stack->push(command1); MyCommand *command2 = new MyCommand(); stack->push(command2); stack->undo(); MyCommand *command3 = new MyCommand(); stack->push(command3); // command2 gets deleted
En efecto, cuando un comando es introducido, se convierte en el comando más alto de la pila.
Para soportar la compresión de comandos, QUndoCommand tiene una función id() y la función virtual mergeWith(). Estas funciones son utilizadas por QUndoStack::push().
Para soportar macros de comandos, un objeto QUndoCommand puede tener cualquier número de comandos hijos. Deshacer o rehacer el comando padre causará que los comandos hijos sean deshechos o rehechos. Un comando puede ser asignado a un padre explícitamente en el constructor. En este caso, el comando será propiedad del padre.
En este caso, el comando padre suele ser un comando vacío, ya que no proporciona su propia implementación de undo() y redo(). En su lugar, utiliza las implementaciones base de estas funciones, que simplemente llaman a undo() o redo() en todos sus hijos. El padre debe, sin embargo, tener un text() significativo.
QUndoCommand *insertRed = new QUndoCommand(); // an empty command insertRed->setText("insert red text"); new InsertText(document, idx, text, insertRed); // becomes child of insertRed new SetColor(document, idx, text.length(), Qt::red, insertRed); stack.push(insertRed);
Otra forma de crear macros es utilizar las funciones de conveniencia QUndoStack::beginMacro() y QUndoStack::endMacro().
Véase también QUndoStack.
Documentación de funciones miembro
[explicit] QUndoCommand::QUndoCommand(QUndoCommand *parent = nullptr)
Construye un objeto QUndoCommand con el padre parent.
Si parent no es nullptr, este comando se añade a la lista de hijos del padre. El comando padre es el propietario de este comando y lo borrará en su destructor.
Véase también ~QUndoCommand().
[explicit] QUndoCommand::QUndoCommand(const QString &text, QUndoCommand *parent = nullptr)
Construye un objeto QUndoCommand con los datos parent y text.
Si parent no es nullptr, este comando se añade a la lista de comandos padre. El comando padre es el propietario de este comando y lo borrará en su destructor.
Véase también ~QUndoCommand().
[virtual noexcept] QUndoCommand::~QUndoCommand()
Destruye el objeto QUndoCommand y todos los comandos hijos.
Véase también QUndoCommand().
QString QUndoCommand::actionText() const
Devuelve una breve cadena de texto que describe lo que hace este comando; por ejemplo, "insertar texto".
El texto se utiliza cuando se actualizan las propiedades de texto de las acciones deshacer y rehacer de la pila.
Véase también text(), setText(), QUndoStack::createUndoAction() y QUndoStack::createRedoAction().
const QUndoCommand *QUndoCommand::child(int index) const
Devuelve el comando hijo en index.
Véase también childCount() y QUndoStack::command().
int QUndoCommand::childCount() const
Devuelve el número de comandos hijos de este comando.
Véase también child().
[virtual] int QUndoCommand::id() const
Devuelve el ID de este comando.
Un ID de comando se utiliza en la compresión de comandos. Debe ser un entero único para la clase de este comando, o -1 si el comando no soporta compresión.
Si el comando soporta compresión, esta función debe ser sobrescrita en la clase derivada para devolver el ID correcto. La implementación base devuelve -1.
QUndoStack::push() sólo intentará fusionar dos comandos si tienen el mismo ID, y el ID no es -1.
Véase también mergeWith() y QUndoStack::push().
bool QUndoCommand::isObsolete() const
Devuelve si el comando está obsoleto.
El booleano se utiliza para la eliminación automática de comandos que ya no son necesarios en la pila. La función isObsolete se comprueba en las funciones QUndoStack::push(), QUndoStack::undo(), QUndoStack::redo(), y QUndoStack::setIndex().
Véase también setObsolete(), mergeWith(), QUndoStack::push(), QUndoStack::undo(), y QUndoStack::redo().
[virtual] bool QUndoCommand::mergeWith(const QUndoCommand *command)
Intenta fusionar este comando con command. Si tiene éxito, devuelve true; si no, devuelve false.
Si esta función devuelve true, llamar a redo() de este comando debe tener el mismo efecto que rehacer este comando y command. Del mismo modo, llamar a undo() de este comando debe tener el mismo efecto que deshacer command y este comando.
QUndoStack sólo intentará fusionar dos comandos si tienen el mismo id, y el id no es -1.
La implementación por defecto devuelve false.
bool AppendText::mergeWith(const QUndoCommand *other) { if (other->id() != id()) // make sure other is also an AppendText command return false; m_text += static_cast<const AppendText*>(other)->m_text; return true; }
Véase también id() y QUndoStack::push().
[virtual] void QUndoCommand::redo()
Aplica un cambio al documento. Esta función debe implementarse en la clase derivada. Llamar a QUndoStack::push(), QUndoStack::undo() o QUndoStack::redo() desde esta función conduce a un comportamiento indefinido.
La implementación por defecto llama a redo() en todos los comandos hijos.
Véase también undo().
void QUndoCommand::setObsolete(bool obsolete)
Establece si el comando es obsoleto en obsolete.
Véase también isObsolete(), mergeWith(), QUndoStack::push(), QUndoStack::undo() y QUndoStack::redo().
void QUndoCommand::setText(const QString &text)
Establece el texto del comando en text.
El texto especificado debe ser una cadena corta legible por el usuario que describa lo que hace este comando.
Si necesitas tener dos cadenas diferentes para text() y actionText(), sepáralas con "\n" y pásalas a esta función. Aunque no utilices esta función para las cadenas en inglés durante el desarrollo, puedes dejar que los traductores utilicen dos cadenas diferentes para ajustarse a las necesidades de idiomas específicos. La característica descrita y la función actionText() están disponibles desde Qt 4.8.
Véase también text(), actionText(), QUndoStack::createUndoAction(), y QUndoStack::createRedoAction().
QString QUndoCommand::text() const
Devuelve una breve cadena de texto que describe lo que hace este comando; por ejemplo, "insertar texto".
El texto se utiliza para los nombres de los elementos en QUndoView.
Véase también actionText(), setText(), QUndoStack::createUndoAction() y QUndoStack::createRedoAction().
[virtual] void QUndoCommand::undo()
Revierte un cambio en el documento. Después de llamar a undo(), el estado del documento debe ser el mismo que antes de llamar a redo(). Esta función debe ser implementada en la clase derivada. Llamar a QUndoStack::push(), QUndoStack::undo() o QUndoStack::redo() desde esta función conduce a un comportamiento indefinido.
La implementación por defecto llama a undo() en todos los comandos hijos en orden inverso.
Véase también redo().
© 2026 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.