1个回答
展开全部
是指Redo和Undo吗?
如果是, 那么请注意两个核心类QUndoCommand 和 QUndoStack
QUndoStack
可以看作是是控制器
它的作用是提供动作的存储(Do), 控制动作恢复(Redo), 撤销(Undo), 甚至复杂的动作合并(将同样的Command合成为一个), 动作宏(通过描述符来描述一些列动作), 等等
而QUndoCommand
可以看作是一种动作, 它保存了你动作的状态, 同时也提供在恢复和撤销时的行为
(例如, 当用户拖动从开始到结束, 可以把整个行为看成"拖动"动作, 它存储了拖动的坐标)
当然, 动作的粒度可以你自己来定义, 也可以把上述例子分成多个动作(拖动开始, 拖动以及拖动结束)
那么, 模型就很简单了, 你看, 你只需要实现对应的QUndoCommand即可
class DrawTriangleCommand : public QUndoCommand
{
private:
SceneController *_controller; //! 你的绘图控制器
TriangleObject *_object; //! 三角形对象
public:
virtual void undo() override
{
_controller->remove(_object);
_controller->askForUpdate();
}
virtual void redo() override
{
_controller->add(_object);
_controller->askForUpdate();
}
};
class CanvasView : public QUndoView
{
private:
QUndoStack *_undoStack;
SceneController *_controller;
public:
virtual bool event(QEvent *e)
{
if (e->type() == OnAddedTriangle) //! 在已经添加三角形对象后触发自定义事件
{
TriangleObject *triangle = /* cast from e */ //! 获取对象
_undoStack->push(new DrawTriangleCommand(_controller, triangle));
}
}
}
上述的代码仅仅提供流程说明, 直接手打的, 不涉及任何项目和API, 具体还是应该看QT的文档, 这块也有比较详细的说明, 请搜索关键字"Qt Undo Framework"
有问题及时留言.
微测检测5.10
2023-05-10 广告
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇...
点击进入详情页
本回答由微测检测5.10提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询