QUndoCommand Class
La classe `QUndoCommand` est la classe de base de toutes les commandes enregistrées dans une ` QUndoStack`. En savoir plus...
| En-tête : | #include <QUndoCommand> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake : | QT += gui |
Fonctions publiques
| 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() |
Description détaillée
Pour une présentation générale du framework « Undo » de Qt, consultez le document de présentation.
Une instance de `QUndoCommand` représente une action d'édition unique sur un document ; par exemple, l'insertion ou la suppression d'un bloc de texte dans un éditeur de texte. `QUndoCommand` peut appliquer une modification au document à l'aide de ` redo()` et annuler cette modification à l'aide de ` undo()`. Les implémentations de ces fonctions doivent être fournies dans une classe dérivée.
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 objet `QUndoCommand` est associé à une chaîne ` text()`. Il s’agit d’une courte chaîne décrivant l’action effectuée par la commande. Elle sert à mettre à jour les propriétés de texte des actions « Annuler » et « Rétablir » de la pile ; voir ` QUndoStack::createUndoAction()` et ` QUndoStack::createRedoAction()`.
Les objets `QUndoCommand` appartiennent à la pile sur laquelle ils ont été ajoutés. ` QUndoStack ` supprime une commande si celle-ci a été annulée et qu’une nouvelle commande est ajoutée. Par exemple :
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 deletedEn effet, lorsqu’une commande est ajoutée à la pile, elle devient la commande située tout en haut de celle-ci.
Pour prendre en charge la compression des commandes, QUndoCommand dispose d’une méthode ` id()` et d’une fonction virtuelle ` mergeWith()`. Ces fonctions sont utilisées par ` QUndoStack::push()`.
Pour prendre en charge les macros de commande, un objet QUndoCommand peut comporter un nombre illimité de commandes filles. L'annulation ou la reprise de la commande parente entraînera l'annulation ou la reprise des commandes filles. Une commande peut être explicitement attribuée à un parent dans le constructeur. Dans ce cas, la commande appartiendra au parent.
Dans ce cas, la commande parente est généralement une commande vide, en ce sens qu’elle ne fournit pas sa propre implémentation de undo() et redo(). Elle utilise plutôt les implémentations de base de ces fonctions, qui se contentent d’appeler undo() ou redo() sur toutes ses commandes enfants. La commande parente doit toutefois disposer d’une fonction text() pertinente.
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);Une autre façon de créer des macros consiste à utiliser les fonctions de commodité QUndoStack::beginMacro() et QUndoStack::endMacro().
Voir également QUndoStack.
Documentation sur les fonctions membres
[explicit] QUndoCommand::QUndoCommand(QUndoCommand *parent = nullptr)
Crée un objet QUndoCommand dont le parent est parent.
Si parent n'est pas de type « nullptr », cette commande est ajoutée à la liste des enfants de la commande parente. La commande parente devient alors propriétaire de cette commande et la supprimera dans son destructeur.
Voir aussi ~QUndoCommand().
[explicit] QUndoCommand::QUndoCommand(const QString &text, QUndoCommand *parent = nullptr)
Crée un objet QUndoCommand avec les paramètres parent et text fournis.
Si parent n’est pas nullptr, cette commande est ajoutée à la liste des enfants de la commande parente. La commande parente devient alors propriétaire de cette commande et la supprimera dans son destructeur.
Voir également ~QUndoCommand().
[virtual noexcept] QUndoCommand::~QUndoCommand()
Supprime l'objet « QUndoCommand » et toutes ses commandes enfants.
Voir aussi QUndoCommand().
QString QUndoCommand::actionText() const
Renvoie une courte chaîne de texte décrivant la fonction de cette commande ; par exemple, « insérer du texte ».
Ce texte est utilisé lors de la mise à jour des propriétés de texte des actions « Annuler » et « Rétablir » de la pile.
Voir également text(), setText(), QUndoStack::createUndoAction() et QUndoStack::createRedoAction().
const QUndoCommand *QUndoCommand::child(int index) const
Renvoie la commande enfant à l'adresse index.
Voir également childCount() et QUndoStack::command().
int QUndoCommand::childCount() const
Renvoie le nombre de commandes enfants contenues dans cette commande.
Voir aussi child().
[virtual] int QUndoCommand::id() const
Renvoie l'identifiant de cette commande.
L'identifiant d'une commande est utilisé dans la compression des commandes. Il doit s'agir d'un entier unique pour la classe de cette commande, ou de -1 si la commande ne prend pas en charge la compression.
Si la commande prend en charge la compression, cette fonction doit être redéfinie dans la classe dérivée afin de renvoyer l'ID correct. L'implémentation de base renvoie -1.
QUndoStack::push() ne tentera de fusionner deux commandes que si elles ont le même ID et si celui-ci n'est pas -1.
Voir également mergeWith() et QUndoStack::push().
bool QUndoCommand::isObsolete() const
Indique si la commande est obsolète.
Cette valeur booléenne sert à supprimer automatiquement les commandes qui ne sont plus nécessaires dans la pile. La fonction isObsolete est vérifiée dans les fonctions QUndoStack::push(), QUndoStack::undo(), QUndoStack::redo() et QUndoStack::setIndex().
Voir également setObsolete(), mergeWith(), QUndoStack::push(), QUndoStack::undo() et QUndoStack::redo().
[virtual] bool QUndoCommand::mergeWith(const QUndoCommand *command)
Tente de fusionner cette commande avec command. Renvoie true en cas de réussite ; sinon, renvoie false.
Si cette fonction renvoie true, l'appel de la fonction redo() de cette commande doit avoir le même effet que de refaire à la fois cette commande et command. De même, l'appel de la fonction undo() de cette commande doit avoir le même effet que d'annuler command et cette commande.
QUndoStack ne tentera de fusionner deux commandes que si elles ont le même identifiant et que celui-ci n’est pas -1.
L’implémentation par défaut renvoie « 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;
}Voir également id() et QUndoStack::push().
[virtual] void QUndoCommand::redo()
Applique une modification au document. Cette fonction doit être implémentée dans la classe dérivée. L'appel des fonctions ` QUndoStack::push()`, ` QUndoStack::undo()` ou ` QUndoStack::redo()` depuis cette fonction entraîne un comportement indéfini.
L'implémentation par défaut appelle la fonction `redo()` sur toutes les commandes enfants.
Voir également undo().
void QUndoCommand::setObsolete(bool obsolete)
Indique si la commande est obsolète sur obsolete.
Voir également isObsolete(), mergeWith(), QUndoStack::push(), QUndoStack::undo() et QUndoStack::redo().
void QUndoCommand::setText(const QString &text)
Définit le texte de la commande sur la chaîne « text » indiquée.
Le texte spécifié doit être une courte chaîne lisible par l'utilisateur décrivant la fonction de cette commande.
Si vous avez besoin de deux chaînes différentes pour text() et actionText(), séparez-les par «\n » et transmettez-les à cette fonction. Même si vous n’utilisez pas cette fonctionnalité pour les chaînes en anglais pendant le développement, vous pouvez tout de même permettre aux traducteurs d’utiliser deux chaînes différentes afin de répondre aux besoins spécifiques de certaines langues. La fonctionnalité décrite et la fonction actionText() sont disponibles depuis Qt 4.8.
Voir également text(), actionText(), QUndoStack::createUndoAction() et QUndoStack::createRedoAction().
QString QUndoCommand::text() const
Renvoie une courte chaîne de texte décrivant la fonction de cette commande ; par exemple, « insérer du texte ».
Ce texte est utilisé pour nommer les éléments dans QUndoView.
Voir également actionText(), setText(), QUndoStack::createUndoAction() et QUndoStack::createRedoAction().
[virtual] void QUndoCommand::undo()
Annule une modification apportée au document. Une fois la fonction `undo()` appelée, l'état du document doit être identique à celui qui prévalait avant l'appel de ` redo()`. Cette fonction doit être implémentée dans la classe dérivée. L'appel des fonctions ` QUndoStack::push()`, ` QUndoStack::undo()` ou ` QUndoStack::redo()` depuis cette fonction entraîne un comportement indéfini.
L'implémentation par défaut appelle undo() sur toutes les commandes enfants dans l'ordre inverse.
Voir également 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.