PySide6.QtGui.QUndoCommand

class QUndoCommand

QUndoCommand 类是存储在 QUndoStack 上的所有命令的基类。更多

概要

方法

虚拟方法

注意

本文档可能包含从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()

另请参阅

QUndoStack

__init__([parent=None])
Parameters:

父级QUndoCommand

构造一个带有父级 parentQUndoCommand 对象。

如果 parent 不是 None,此命令将附加到父级的子列表中。父命令将拥有此命令,并在其析构函数中删除它。

另请参阅

~QUndoCommand()

__init__(text[, parent=None])
Parameters:

使用给定的parenttext构造一个QUndoCommand对象。

如果 parent 不是 None,此命令将附加到父级的子列表中。父级命令将拥有此命令,并在其析构函数中删除它。

另请参阅

~QUndoCommand()

actionText()
Return type:

字符串

返回一个简短的文本字符串,描述此命令的功能;例如,“插入文本”。

当堆栈的撤销和重做操作的文本属性更新时,使用此文本。

child(index)
Parameters:

索引 – int

Return type:

QUndoCommand

返回位于index的子命令。

另请参阅

childCount() command()

childCount()
Return type:

整数

返回此命令中的子命令数量。

另请参阅

child()

id()
Return type:

整数

返回此命令的ID。

命令ID用于命令压缩。它必须是此命令类唯一的整数,如果命令不支持压缩,则为-1。

如果命令支持压缩,则必须在派生类中重写此函数以返回正确的ID。基本实现返回-1。

push() 只有在两个命令具有相同ID且ID不为-1时才会尝试合并它们。

另请参阅

mergeWith() push()

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

def mergeWith(self, QUndoCommand other):

    if other.id() != id(): # make sure other is also an AppendText command
        return False
    m_text += AppendText(other).m_text
    return True

另请参阅

id() push()

redo()

对文档应用更改。此函数必须在派生类中实现。从此函数中调用push()undo()redo()会导致未定义的行为。

默认实现在所有子命令上调用redo()。

另请参阅

undo()

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()。

另请参阅

redo()