Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QUndoCommand类是所有的命令存储在基类QUndoStack。More...
该QUndoCommand类是所有的命令存储在基类QUndoStack。
对于Qt的复原框架的概述,请参阅overview document。
一个QUndoCommand代表文档中的单个编辑操作,例如,插入或删除一个文本编辑器文本块。 QUndoCommand可以申请更改的文件与redo()和撤销与变更undo( ) 。在实现这些功能必须在派生类中提供。
class AppendText : public QUndoCommand { public: AppendText(QString *doc, const QString &text) : m_document(doc), m_text(text) { setText("append text"); } virtual void undo() { m_document->chop(m_text.length()); } virtual void redo() { m_document->append(m_text); } private: QString *m_document; QString m_text; };
一个QUndoCommand都有一个关联的text( ) 。这是一个短字符串描述该命令功能。它是用来更新堆栈的撤消的文本属性和重复动作,见QUndoStack.createUndoAction()和QUndoStack.createRedoAction( ) 。
QUndoCommand对象由堆栈他们被压入资。QUndoStack删除的命令,如果它已被撤消和一个新的命令被推动。例如:
MyCommand *command1 = new MyCommand(); stack->push(command1); MyCommand *command2 = new MyCommand(); stack->push(command2); stack->undo(); MyCommand *command3 = new MyCommand(); stack->push(command3); // command2 gets deleted
实际上,当命令被按下时,它成为堆栈上的最顶层的命令。
为了支持命令压缩, QUndoCommand有id( )和虚拟功能mergeWith( ) 。这些功能所使用的QUndoStack.push( ) 。
为了支持宏命令,一个QUndoCommand对象可以有任意数量的子命令。撤消或重做父的命令会让孩子命令撤消或重做。命令可以在构造函数中显式地指定给父母。在这种情况下,该命令将被父所拥有。
在这种情况下,父通常是一个空命令,因为它不提供它自己的实现的undo()和redo( ) 。相反,它使用这些功能的基本实现,它只是简单的调用undo()或redo( )在它的所有子项。家长应,然而,有一个有意义的text( ) 。
QUndoCommand *insertRed = new QUndoCommand(); // an empty command insertRed->setText("insert red text"); new InsertText(document, idx, text, insertRed); // becomes child of insertRed new SetColor(document, idx, text.length(), Qt.red, insertRed); stack.push(insertRed);
另一种方式来创建宏是使用便利的功能QUndoStack.beginMacro()和QUndoStack.endMacro( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QUndoCommand与父对象parent。
If parent不为0 ,则该命令被添加到父节点的子列表。父命令则拥有这个命令将在其析构函数删除它。
See also ~QUndoCommand( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个QUndoCommand与给定对象parent和text。
If parent不为0 ,则该命令被添加到父节点的子列表。父命令则拥有这个命令将在其析构函数删除它。
See also ~QUndoCommand( ) 。
返回描述了这个命令做了简短的文本字符串,例如, “插入文字” 。
该文本时使用的堆栈的撤消的文本属性和重复动作被更新。
此功能被引入Qt的4.8 。
See also text( )setText( )QUndoStack.createUndoAction()和QUndoStack.createRedoAction( ) 。
在返回的子命令index。
此功能被引入Qt的4.4 。
See also childCount()和QUndoStack.command( ) 。
返回此命令子命令的数量。
此功能被引入Qt的4.4 。
See also child( ) 。
返回此命令的ID 。
命令ID用来在命令压缩。它必须是一个整数独此命令的类,或者-1如果命令不支持压缩。
如果命令支持压缩这个函数必须在派生类中重写以返回正确的ID 。基实现返回-1 。
QUndoStack.push()将只尝试合并两个命令,如果它们具有相同的ID,并且该ID不是-1。
See also mergeWith()和QUndoStack.push( ) 。
尝试与合并这个命令command。成功时返回TRUE ,否则返回False 。
如果这个函数返回True,则调用此命令的redo( )必须具有相同的效果,既重做这个命令和command。同样,调用此命令的undo( )必须具有相同的效果撤消command与此命令。
QUndoStack只会尝试合并两个命令,如果他们有相同的id ,而id是不是-1 。
默认实现返回False 。
bool AppendText.mergeWith(const QUndoCommand *other) { if (other->id() != id()) // make sure other is also an AppendText command return false; m_text += static_cast<const AppendText*>(other)->m_text; return true; }
See also id()和QUndoStack.push( ) 。
适用变更的文件。这个函数必须在派生类中实现。调用QUndoStack.push( )QUndoStack.undo()或QUndoStack.redo从这个函数( )导致未定义beahavior 。
默认实现调用重做( )对所有的子命令。
See also undo( ) 。
设置为命令的文本text规定。
指定文本应描述了这个命令的作用很短的用户可读的字符串。
如果你需要有两个不同的字符串text()和actionText( ) ,将它们分开为“\ n ” ,并传递到这个函数。即使你在开发过程中不使用此功能的英文字符串,你仍然可以让翻译使用两个不同的字符串,以匹配特定语言的需求。所描述的特征和功能actionText( )是因为Qt的4.8可用。
See also text( )actionText( )QUndoStack.createUndoAction()和QUndoStack.createRedoAction( ) 。
返回描述了这个命令做了简短的文本字符串,例如, “插入文字” 。
该文本是用于项目的名称QUndoView。
See also actionText( )setText( )QUndoStack.createUndoAction()和QUndoStack.createRedoAction( ) 。
恢复一个变化到文档中。撤消()被调用后,文件的状态应该是和以前一样redo( )被调用。这个函数必须在派生类中实现。调用QUndoStack.push( )QUndoStack.undo()或QUndoStack.redo从这个函数( )导致未定义beahavior 。
默认实现调用撤消( )上的所有子命令的顺序相反。
See also redo( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |