Header:#include < QUndoStack >
qmake:QT += widgets
Since:Qt 4.2
Inherits:QObject
This class was introduced in Qt 4.2.
Properties
active : bool
canRedo : const bool
canUndo : const bool
clean : const bool
redoText : const QString
undoLimit : int
undoText : const QString
Public Functions
QUndoStack(QObject *parent = nullptr)
virtual ~QUndoStack()
void beginMacro(const QString &text)
bool canRedo() const
bool canUndo() const
int cleanIndex() const
void clear()
const QUndoCommand *command(int index) const
int count() const
QAction *createRedoAction(QObject *parent, const QString &prefix = QString()) const
QAction *createUndoAction(QObject *parent, const QString &prefix = QString()) const
void endMacro()
int index() const
bool isActive() const
bool isClean() const
void push(QUndoCommand *cmd)
QString redoText() const
void setUndoLimit(int limit)
QString text(int idx) const
int undoLimit() const
QString undoText() const
Public Slots
void redo()
void resetClean()
void setActive(bool active = true)
void setClean()
void setIndex(int idx)
void undo()
Signals
void canRedoChanged(bool canRedo)
void canUndoChanged(bool canUndo)
void cleanChanged(bool clean)
void indexChanged(int idx)
void redoTextChanged(const QString &redoText)
void undoTextChanged(const QString &undoText)
Detailed Description
有关Qt撤消框架的概述,请参阅概述文档。
撤销堆栈维护已应用于文档的命令堆栈。
使用push()将新命令推入堆栈。命令可以使用undo()和redo()来撤消和重做,或者触发createUndoAction()和createRedoAction()返回的操作。
QUndoStack跟踪当前的命令。这个命令将在下次调用redo()时执行。该命令的索引由index()返回。可以使用setIndex()前滚或回滚编辑对象的状态。如果堆栈上最顶层的命令已经重做,index()等于count()。
QUndoStack提供了对撤销和重做操作、命令压缩、命令宏的支持,并支持干净状态的概念。
Undo and Redo Actions
QUndoStack提供了方便的撤消和重做QAction对象,它可以插入到菜单或工具栏中。当命令撤消或重做时,QUndoStack更新这些操作的文本属性以反映它们将触发的更改。当没有可用于撤消或重做的命令时,这些操作也被禁用。这些动作由QUndoStack::createUndoAction()和QUndoStack::createRedoAction()返回。
Command Compression and Macros
当几个命令可以被压缩成一个命令,可以在一个操作中撤消和重做时,命令压缩是有用的。例如,当用户在文本编辑器中键入一个字符时,将创建一个新命令。该命令将字符插入到文档的光标位置。但是,用户可以更方便地撤销或重做整个单词、句子或段落的输入。命令压缩允许将这些单字符命令合并为插入或删除文本部分的单个命令。更多信息请参见QUndoCommand::mergeWith()和push()。
命令宏是一个命令序列,所有这些命令都可以一次撤消和重做。命令宏是通过为命令提供一个子命令列表来创建的。撤消或重做父命令将导致撤消或重做子命令。命令宏可以通过在QUndoCommand构造函数中指定父类来显式创建,或者通过使用方便的函数beginMacro()和endMacro()来创建。
虽然命令压缩和宏似乎对用户具有相同的效果,但它们在应用程序中通常具有不同的用途。如果不需要单独记录,并且只有较大的更改与用户相关,则可以有效地压缩对文档执行小更改的命令。但是,对于需要单独记录或不能压缩的命令,使用宏在维护每个命令的记录的同时提供更方便的用户体验是有用的。
Clean State
qunddostack支持干净状态的概念。当文档保存到磁盘时,可以使用setClean()将堆栈标记为干净。每当堆栈通过撤消和重做命令返回到此状态时,它都会发出cleanChanged()信号。当堆栈离开干净状态时,也会发出这个信号。该信号通常用于启用和禁用应用程序中的保存操作,并更新文档的标题以反映它包含未保存的更改。
Obsolete Commands
QUndoStack能够从堆栈中删除不再需要的命令。例如,当两个命令合并在一起,合并后的命令没有任何功能时,删除命令。这可以从移动命令中看到,用户将鼠标移动到屏幕的一部分,然后将其移动到原始位置。合并后的命令导致鼠标移动为0。该命令没有使用价值,可以删除。另一个例子是由于连接问题而导致网络命令失败。在这种情况下,命令将从堆栈中删除,因为redo()和undo()函数没有函数,因为存在连接问题。
可以使用QUndoCommand::setObsolete()函数标记命令已废弃。QUndoCommand::isObsolete()标志在QUndoStack::push(), QUndoStack::undo(), QUndoStack::redo()和QUndoStack::setIndex()调用QUndoCommand::undo(), QUndoCommand::redo()和QUndoCommand:mergeWith()后检查。
如果一个命令被设置为过时,并且clean索引大于或等于当前命令索引,则当该命令从堆栈中删除时,将重置clean索引。
See also QUndoCommand and QUndoView.
Property Documentation
active : bool
此属性保存此堆栈的活动状态。
应用程序通常有多个撤消堆栈,每个打开的文档一个撤消堆栈。活动堆栈是与当前活动文档相关联的堆栈。如果堆栈属于一个QUndoGroup,调用QUndoGroup