展开全部
是指Redo和Undo吗?
如果是, 那么请注意两个核心类QUndoCommand 和 QUndoStack
QUndoStack
可以看作是是控制器
它的作用是提供动作的存储62616964757a686964616fe59b9ee7ad9431333335346136(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);