QUndoGroup Class
QUndoGroup 类是一组QUndoStack 对象。更多内容...
| 头文件: | #include <QUndoGroup> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 继承自: | QObject |
公共函数
| QUndoGroup(QObject *parent = nullptr) | |
| virtual | ~QUndoGroup() |
| QUndoStack * | activeStack() const |
| void | addStack(QUndoStack *stack) |
| bool | canRedo() const |
| bool | canUndo() const |
| QAction * | createRedoAction(QObject *parent, const QString &prefix = QString()) const |
| QAction * | createUndoAction(QObject *parent, const QString &prefix = QString()) const |
| bool | isClean() const |
| QString | redoText() const |
| void | removeStack(QUndoStack *stack) |
| QList<QUndoStack *> | stacks() const |
| QString | undoText() const |
公共槽
| void | redo() |
| void | setActiveStack(QUndoStack *stack) |
| void | undo() |
信号
| void | activeStackChanged(QUndoStack *stack) |
| 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) |
详细说明
有关 Qt 撤销框架的概述,请参阅概述。
一个应用程序通常有多个撤销堆栈,每个已打开的文档对应一个。同时,一个应用程序通常有一个撤销操作和一个重做操作,用于在活动文档中触发撤销或重做。
QUndoGroup 是一组QUndoStack 对象,其中一个可能是活动堆栈。它具有undo() 和redo() 槽,这些槽会为活动堆栈调用QUndoStack::undo() 和QUndoStack::redo()。它还具有createUndoAction() 和createRedoAction() 函数。这些函数返回的操作与活动堆栈的QUndoStack::createUndoAction() 和QUndoStack::createRedoAction() 返回的操作行为相同。
使用addStack() 将堆栈添加到组中,使用removeStack() 将其从组中移除。当堆栈以某个组作为父级创建时QObject ,该堆栈会隐式地被添加到该组中。
程序员有责任通过调用QUndoStack::setActive() 来指定哪个堆栈为活动堆栈,通常是在关联的文档窗口获得焦点时进行。活动堆栈也可以通过setActiveStack() 进行设置,并由activeStack() 返回。
当使用addStack() 将一个堆栈添加到组中时,该组不会获得该堆栈的所有权。这意味着必须在组之外单独删除该堆栈。当堆栈被删除时,它会自动从组中移除。一个堆栈只能属于一个组。将其添加到另一个组将导致它从之前的组中移除。
QUndoGroup 与QUndoView 配合使用时也很有用。如果通过QUndoView::setGroup() 将QUndoView 设置为监视某个组,它将自动更新以显示当前活动的堆栈。
成员函数文档
[explicit] QUndoGroup::QUndoGroup(QObject *parent = nullptr)
创建一个父对象为parent 的空QUndoGroup对象。
另请参阅 addStack()。
[virtual noexcept] QUndoGroup::~QUndoGroup()
销毁QUndoGroup 。
QUndoStack *QUndoGroup::activeStack() const
返回该组的当前活动堆栈。
如果所有堆栈均未处于活动状态,或者该组为空,则此函数返回nullptr 。
另请参阅 setActiveStack()和QUndoStack::setActive()。
[signal] void QUndoGroup::activeStackChanged(QUndoStack *stack)
每当组的活动栈发生变化时,都会发出此信号。这可能发生在调用setActiveStack() 或QUndoStack::setActive() 时,或者当活动栈从组中移除时。stack 表示新的活动栈。如果没有活动栈,则stack 为 0。
另请参阅 setActiveStack() 和QUndoStack::setActive()。
void QUndoGroup::addStack(QUndoStack *stack)
将stack 添加到该组中。该组不会获得该堆栈的所有权。将堆栈添加到组的另一种方法是在QUndoStack::QUndoStack() 中将该组指定为堆栈的父对象QObject 。在这种情况下,当组被删除时,该堆栈也会按照 QObject 的常规方式被删除。
另请参阅 removeStack()、stacks() 和QUndoStack::QUndoStack()。
bool QUndoGroup::canRedo() const
返回活动栈的QUndoStack::canRedo()的值。
如果没有任何堆栈处于活动状态,或者该组为空,则此函数返回false 。
另请参阅 canUndo() 和setActiveStack()。
[signal] void QUndoGroup::canRedoChanged(bool canRedo)
每当活动栈发出QUndoStack::canRedoChanged()信号或活动栈发生变化时,都会发出此信号。
canRedo 表示新状态;若活动栈为 0,则返回 false。
另请参阅 QUndoStack::canRedoChanged() 和setActiveStack()。
bool QUndoGroup::canUndo() const
返回活动堆栈中QUndoStack::canUndo()的值。
如果没有任何堆栈处于活动状态,或者该组为空,则此函数返回 `false`。
另请参阅 canRedo() 和setActiveStack()。
[signal] void QUndoGroup::canUndoChanged(bool canUndo)
每当活动栈发出QUndoStack::canUndoChanged()信号或活动栈发生变化时,都会发出此信号。
canUndo 表示新状态;若活动栈为 0,则返回 false。
另请参阅 QUndoStack::canUndoChanged() 和setActiveStack()。
[signal] void QUndoGroup::cleanChanged(bool clean)
每当活动栈发出QUndoStack::cleanChanged() 信号或活动栈发生变化时,都会发出此信号。
clean 表示新状态;若活动栈为 0,则返回 true。
另请参阅 QUndoStack::cleanChanged() 和setActiveStack()。
QAction *QUndoGroup::createRedoAction(QObject *parent, const QString &prefix = QString()) const
创建一个父对象为parent 的 redoQAction 对象。
触发此操作将导致在活动堆栈上调用QUndoStack::redo()。 此操作的文本始终为下次调用redo() 时将重做的命令文本,并在其前缀添加prefix 。如果没有可重做的命令、组为空或没有任何堆栈处于活动状态,则此操作将被禁用。
如果prefix 为空,则使用默认模板“Redo %1”代替前缀。在 Qt 4.8 之前,默认使用前缀“Redo”。
另请参阅 createUndoAction()、canRedo() 和QUndoCommand::text()。
QAction *QUndoGroup::createUndoAction(QObject *parent, const QString &prefix = QString()) const
创建一个父对象为parent 的撤销对象QAction 。
触发此操作将导致在活动堆栈上调用QUndoStack::undo()。 此操作的文本始终为下次调用undo() 时将被撤销的命令文本,并在前面加上前缀prefix 。如果没有可撤销的命令、组为空或没有任何堆栈处于活动状态,则此操作将被禁用。
如果prefix 为空,则使用默认模板“Undo %1”代替前缀。在 Qt 4.8 之前,默认使用前缀“Undo”。
另请参阅 createRedoAction()、canUndo() 和QUndoCommand::text()。
[signal] void QUndoGroup::indexChanged(int idx)
每当活动栈发出QUndoStack::indexChanged()信号,或者活动栈发生变化时,都会发出此信号。
idx 是新的当前索引,如果活动栈为 0,则为 0。
另请参阅 QUndoStack::indexChanged() 和setActiveStack()。
bool QUndoGroup::isClean() const
返回活动栈的QUndoStack::isClean()的值。
如果没有任何堆栈处于活动状态,或者该组为空,则此函数返回true 。
另请参阅 setActiveStack()。
[slot] void QUndoGroup::redo()
在活动堆栈上调用QUndoStack::redo()。
如果没有任何栈处于活动状态,或者该组为空,则此函数不执行任何操作。
另请参见 undo()、canRedo() 和setActiveStack()。
QString QUndoGroup::redoText() const
返回活动栈中QUndoStack::redoText()的值。
如果没有任何栈处于活动状态,或者该组为空,则此函数返回一个空字符串。
另请参阅 undoText() 和setActiveStack()。
[signal] void QUndoGroup::redoTextChanged(const QString &redoText)
每当活动栈发出QUndoStack::redoTextChanged()信号或活动栈发生变化时,都会发出此信号。
redoText 表示新状态;若活动栈为 0,则返回空字符串。
另请参阅 QUndoStack::redoTextChanged() 和setActiveStack()。
void QUndoGroup::removeStack(QUndoStack *stack)
将stack 从该组中移除。如果该栈是该组中的活动栈,则活动栈将变为 0。
另请参阅 addStack()、stacks() 和QUndoStack::~QUndoStack()。
[slot] void QUndoGroup::setActiveStack(QUndoStack *stack)
将该组的活动堆栈设置为“stack ”。
如果该堆栈不属于此组,则此函数不执行任何操作。
等同于在stack 上调用QUndoStack::setActive()。
createUndoAction() 和createRedoAction() 返回的操作现在将与stack 的QUndoStack::createUndoAction() 和QUndoStack::createRedoAction() 返回的操作行为一致。
另请参阅 QUndoStack::setActive() 和activeStack()。
QList<QUndoStack *> QUndoGroup::stacks() const
返回该组中的堆栈列表。
另请参阅 addStack() 和removeStack()。
[slot] void QUndoGroup::undo()
在活动堆栈上调用QUndoStack::undo()。
如果没有任何栈处于活动状态,或者该组为空,则此函数不执行任何操作。
另请参阅 redo()、canUndo() 以及setActiveStack()。
QString QUndoGroup::undoText() const
返回当前活动栈中QUndoStack::undoText()的值。
如果没有任何堆栈处于活动状态,或者该组为空,则此函数返回一个空字符串。
另请参阅 redoText()和setActiveStack()。
[signal] void QUndoGroup::undoTextChanged(const QString &undoText)
每当活动栈发出QUndoStack::undoTextChanged()信号或活动栈发生变化时,都会发出此信号。
undoText 表示新状态;若活动栈为 0,则返回空字符串。
另请参阅 QUndoStack::undoTextChanged() 和setActiveStack()。
© 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.