qt中的undo和redo机制。
来源:互联网 发布:淘宝摄影需要什么器材 编辑:程序博客网 时间:2024/06/05 04:36
1.
首先知道undo和redo动作的创建。
这两个动作是由QUndoStack创建的。
当点击undo或者redo的时候,qt框架就自动调用QUndoStack中处于栈顶位置的QUndoCommand命令。
QAction *unDO = m_undoStack->CreateAction( this,tr("undo") );
QAction *reDO = m_undoStack->CreateAction( this,tr("redo") );
2.
主窗口中增加一个item。比如addBox
QUndoCommand *addCommand = new AddCommand(DiagramItem::Box, diagramScene);//创建了一个addCommandundoStack->push(addCommand);//调用QUndoStack的redo()方法 将一个addCommand添加到undoStack中,这样才调用了addcommand的redo()方法。首先创建相应的QUndoCommand命令,然后将该QUndoCommand命令添加到undoStack中,这个push()方法会导致,该QUndoCommand命令的redo()方法被调用。
3.
AddCommand::AddCommand(DiagramItem::DiagramType addType, QGraphicsScene *scene, QUndoCommand *parent) : QUndoCommand(parent){ static int itemCount = 0; myGraphicsScene = scene;//在command中封装场景 myDiagramItem = new DiagramItem(addType);//在Command中封装场景中的item
scene->update(); ++itemCount;}在QUndoCommand中封装场景QGraphicsSence和QGraphicsItem项,但是构造函数中没有做将item添加到场景中的操作。
4.
//add box操作中调用了undoStack的push()方法,该方法导致AddCommand的redo()方法调用
void AddCommand::redo()
{
myGraphicsScene->addItem(myDiagramItem);
myDiagramItem->setPos(initialPosition);
myGraphicsScene->clearSelection();
myGraphicsScene->update();
}
在QUndoCommand的redo()方法中,才将item添加到场景中。
5.
会需要三个QUndoCommand:AddCommand,MoveCommand,DeleteCommand。
因为item会被添加进场景中,在场景中移动,从场景中删除。
具体,看例子,QT中的Demo/undo frame.
0 0
- qt中的undo和redo机制。
- Undo和Redo机制
- Oracle中的Redo和Undo简单介绍
- qt的redo和undo undo撤销(后退),redo取消撤销(前进)
- redo和undo
- oracle redo 和undo
- RCP UNDO和Redo
- redo 和 undo 之一
- ORACLE UNDO和REDO
- redo和undo
- 关于Undo和Redo
- Redo和Undo
- redo 和 undo
- redo和undo
- redo和undo 详解
- redo 和 undo log
- Oracle Core 学习笔记一 -- Redo 和 Undo 机制详解
- Oracle Core 学习笔记一 -- Redo 和 Undo 机制详解
- postgres 引起oom问题的 explain 分析。
- base64
- Spring+Mybatis 多数据源配置
- SolrCloud Wiki翻译(1) Getting Started with SolrCloud
- TortoiseSVN客户端重新设置用户名和密码
- qt中的undo和redo机制。
- 第十四周 课后实践:阅读程序
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- common table expression
- IOS内存管理retain,assign,copy,strong,weak
- ping网络故障
- Android平台上基于OpenCV的道路循迹
- Jlh打靶
- 设计模式之 - 观察者模式