- 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()。
另请参阅