- class QUndoCommand#
QUndoCommand类是所有存储在QUndoStack上的命令的基类。更多...…简述#
方法#
def
__init__()def
actionText()def
child()def
childCount()def
isObsolete()def
setObsolete()def
setText()def
text()
虚函数#
def
id()def
mergeWith()定义
redo()定义
undo()
注意
本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译中的问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 创建工单来通知我们。
详细说明#
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
有关 Qt 的撤销框架概述,请参阅概述文档。
一个
QUndoCommand表示文档上的单个编辑操作;例如,在文本编辑器中插入或删除文本块。QUndoCommand可以通过redo()应用更改,并通过undo()撤销更改。这些函数的实现必须在派生类中提供。class AppendText(QUndoCommand): # public AppendText(QString doc, QString text) self.m_document = doc self.m_text = text) { setText("append text" def undo(): { m_document.chop(m_text.length()); } def redo(): { m_document.append(m_text); } # private m_document = QString() m_text = QString()
QUndoCommand有一个关联的text()方法。这是一个描述命令所执行操作的简短字符串。它用于更新堆栈中撤销和重做操作的文本属性;请参阅createUndoAction()和createRedoAction()。QUndoCommand对象属于它们被推入的堆栈。如果执行了撤销操作并且推入了新的命令,则QUndoStack会删除命令。例如command1 = MyCommand() stack.push(command1) command2 = MyCommand() stack.push(command2) stack.undo() command3 = MyCommand() stack.push(command3) # command2 gets deleted
效果上,当推入一个命令时,它成为堆栈中最顶层的命令。
为了支持命令压缩,
QUndoCommand有一个id()和虚拟函数mergeWith()。这些函数由push()使用。为了支持命令宏,一个
QUndoCommand对象可以有任意数量的子命令。撤销或重做父命令将导致子命令被撤销或重做。可以在构造函数中显式地将命令分配给父命令。在这种情况下,命令将由父命令拥有。在这种情况下,父命令通常是一个空命令,因为它不提供自己的
undo()和redo()实现。相反,它使用这些函数的基本实现,这些实现仅在其所有子命令上调用undo()或redo()。然而,父命令应该有一个有意义的text()。insertRed = QUndoCommand() # an empty command() insertRed.setText("insert red text") InsertText(document, idx, text, insertRed) # becomes child of insertRed SetColor(document, idx, text.length(), Qt.red, insertRed) stack.push(insertRed)
创建宏的另一种方法是使用便利函数
beginMacro()和endMacro()。另请参阅
- __init__([parent=None])#
- 参数:
parent -
QUndoCommand
构建一个具有父
parent的QUndoCommand对象。如果
parent不是None,则此命令将被附加到父级的子命令列表中。然后父命令将拥有此命令,并在其析构函数中删除它。另请参阅
~QUndoCommand()- __init__(text[, parent=None])
- 参数:
text - str
parent -
QUndoCommand
构建一个具有给定
parent和text的QUndoCommand对象。如果
parent不是None,则此命令将被附加到父级的子命令列表中。然后父命令将拥有此命令,并在其析构函数中删除它。另请参阅
~QUndoCommand()- actionText()#
- 返回类型:
str
返回一个描述此命令执行内容的简短文本字符串;例如,“插入文本”。
当更新存储栈的撤销和重做操作的文本属性时,将使用该文本。
- child(index)#
- 参数:
index – int
- 返回类型:
返回索引为
index的子命令。另请参阅
- childCount()#
- 返回类型:
int
返回该命令中子命令的数量。
另请参阅
- id()#
- 返回类型:
int
返回该命令的 ID。
命令 ID 用于命令压缩。它必须是此命令类独有的整数,如果命令不支持压缩则为 -1。
如果命令支持压缩,则必须在派生类中重写此函数以返回正确的 ID。基本实现返回 -1。
push()只会尝试合并具有相同 ID 的两个命令,且 ID 不是 -1。另请参阅
- isObsolete()#
- 返回类型:
bool
返回该命令是否已过时。
布尔值用于自动删除在栈中不再是必要的命令。在
push()、undo()、redo()、和setIndex()等函数中都会检查 isObsolete 函数。- mergeWith(other)#
- 参数:
other –
QUndoCommand- 返回类型:
bool
警告
本节包含从 C++ 自动翻译到 Python 的代码片段,可能包含错误。
尝试将此命令与
command合并。如果成功则返回true;否则返回false。如果此函数返回
true,调用此命令的redo()必须与重做此命令和command产生相同的效果。同样,调用此命令的undo()必须与撤销command和此命令产生相同的效果。QUndoStack只会尝试合并具有相同 ID 且 ID 不是 -1 的两个命令。默认实现返回
false。- redo()#
将更改应用到文档上。此函数必须在派生类中实现。从此函数调用
push()、undo()或redo()会导致未定义的行为。默认实现调用所有子命令的 redo()。
另请参阅
- setObsolete(obsolete)#
- 参数:
obsolete – bool
设置命令是否过时为
obsolete。另请参阅
- 参数:
text - str
另请参阅
- 返回类型:
str
返回一个描述此命令执行内容的简短文本字符串;例如,“插入文本”。
另请参阅
撤销对文档的更改。调用 undo() 后,文档的状态应与之前调用
redo()之前相同。此函数必须在派生类中实现。从这个函数中调用push()、undo()或redo()将导致未定义的行为。默认实现以相反顺序对所有子命令调用 undo()。
另请参阅