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])#
参数:

parent - QUndoCommand

构建一个具有父 parentQUndoCommand 对象。

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

另请参阅

~QUndoCommand()

__init__(text[, parent=None])
参数:

构建一个具有给定 parenttextQUndoCommand 对象。

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

另请参阅

~QUndoCommand()

actionText()#
返回类型:

str

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

当更新存储栈的撤销和重做操作的文本属性时,将使用该文本。

child(index)#
参数:

index – int

返回类型:

QUndoCommand

返回索引为 index 的子命令。

另请参阅

childCount() command()

childCount()#
返回类型:

int

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

另请参阅

child()

id()#
返回类型:

int

返回该命令的 ID。

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

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

push() 只会尝试合并具有相同 ID 的两个命令,且 ID 不是 -1。

另请参阅

mergeWith() push()

isObsolete()#
返回类型:

bool

返回该命令是否已过时。

布尔值用于自动删除在栈中不再是必要的命令。在push()undo()redo()、和setIndex() 等函数中都会检查 isObsolete 函数。

mergeWith(other)#
参数:

otherQUndoCommand

返回类型:

bool

警告

本节包含从 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)#
参数:

obsolete – bool

设置命令是否过时为 obsolete

另请参阅

参数:

text - str

另请参阅

返回类型:

str

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

另请参阅

撤销对文档的更改。调用 undo() 后,文档的状态应与之前调用 redo() 之前相同。此函数必须在派生类中实现。从这个函数中调用 push()undo()redo() 将导致未定义的行为。

默认实现以相反顺序对所有子命令调用 undo()。

另请参阅

redo()