PySide6.QtGui.QUndoCommand¶
- class QUndoCommand¶
QUndoCommand类是存储在QUndoStack上的所有命令的基类。更多…概要¶
方法¶
def
__init__()def
actionText()def
child()def
childCount()def
isObsolete()def
setObsolete()def
setText()def
text()
虚拟方法¶
def
id()def
mergeWith()def
redo()def
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])¶
- Parameters:
父级 –
QUndoCommand
构造一个带有父级
parent的QUndoCommand对象。如果
parent不是None,此命令将附加到父级的子列表中。父命令将拥有此命令,并在其析构函数中删除它。另请参阅
~QUndoCommand()- __init__(text[, parent=None])
- Parameters:
文本 – str
parent –
QUndoCommand
使用给定的
parent和text构造一个QUndoCommand对象。如果
parent不是None,此命令将附加到父级的子列表中。父级命令将拥有此命令,并在其析构函数中删除它。另请参阅
~QUndoCommand()- actionText()¶
- Return type:
字符串
返回一个简短的文本字符串,描述此命令的功能;例如,“插入文本”。
当堆栈的撤销和重做操作的文本属性更新时,使用此文本。
- child(index)¶
- Parameters:
索引 – int
- Return type:
返回位于
index的子命令。另请参阅
- childCount()¶
- Return type:
整数
返回此命令中的子命令数量。
另请参阅
- id()¶
- Return type:
整数
返回此命令的ID。
命令ID用于命令压缩。它必须是此命令类唯一的整数,如果命令不支持压缩,则为-1。
如果命令支持压缩,则必须在派生类中重写此函数以返回正确的ID。基本实现返回-1。
push()只有在两个命令具有相同ID且ID不为-1时才会尝试合并它们。另请参阅
- isObsolete()¶
- Return type:
布尔
返回命令是否已过时。
布尔值用于自动移除堆栈中不再需要的命令。isObsolete函数在函数
push()、undo()、redo()和setIndex()中被检查。- mergeWith(other)¶
- Parameters:
其他 –
QUndoCommand- Return type:
布尔
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
尝试将此命令与
command合并。成功时返回true;否则返回false。如果此函数返回
true,调用此命令的redo()必须具有与此命令和command同时重做相同的效果。同样,调用此命令的undo()必须具有与撤销command和此命令相同的效果。QUndoStack只有在两个命令具有相同的 id 且 id 不为 -1 时才会尝试合并它们。默认实现返回
false。- redo()¶
对文档应用更改。此函数必须在派生类中实现。从此函数中调用
push()、undo()或redo()会导致未定义的行为。默认实现在所有子命令上调用redo()。
另请参阅
- setObsolete(obsolete)¶
- Parameters:
已过时 – bool
设置命令是否过时到
obsolete。- setText(text)¶
- Parameters:
文本 – str
将命令的文本设置为指定的
text。指定的文本应该是一个简短的用户可读字符串,描述此命令的作用。
如果你需要为
text()和actionText()提供两个不同的字符串,可以用“\n”分隔它们并传递给这个函数。即使你在开发过程中不为英文字符串使用此功能,你仍然可以让翻译者使用两个不同的字符串以满足特定语言的需求。所描述的功能和函数actionText()自Qt 4.8起可用。- text()¶
- Return type:
字符串
返回一个简短的文本字符串,描述此命令的功能;例如,“插入文本”。
该文本用于QUndoView中项目的名称。
- undo()¶
撤销对文档的更改。调用undo()后,文档的状态应与调用
redo()之前相同。此函数必须在派生类中实现。从此函数中调用push()、undo()或redo()会导致未定义的行为。默认实现会以相反的顺序在所有子命令上调用undo()。
另请参阅