如何在QStandarItemModel弹出的QTableView上撤消或恢复用户条目?
我已将dataChanged信号与处理程序连接,我在其中验证数据......
connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(validateData(QModelIndex,QModelIndex)));
...但是如果用户输入错误,我想将用户条目恢复或撤消到该项目的上一个值。
我已经阅读了从QAbstractItemModel继承的revert()成员,但我无法理解它是如何工作的。文档说“让模型知道它应该丢弃缓存的信息。”但我不确定用户输入的数据是缓存还是已存储在模型中。
无论如何,如果我尝试......
model->revert();
...错误的用户输入后,它不起作用。
提前致谢!
答案 0 :(得分:2)
查看Qt的undo framework。文件中的介绍说:
Qt的Undo Framework是Command Pattern的一个实现, 用于在应用程序中实现撤消/重做功能。
Command模式基于所有编辑的想法 应用程序通过创建命令对象的实例来完成。命令 对象将更改应用于文档并存储在命令中 堆。此外,每个命令都知道如何撤消其更改 将文档恢复到以前的状态。只要了 应用程序仅使用命令对象来更改状态 在文档中,可以通过遍历来撤消一系列命令 向下堆栈并依次调用每个命令的undo。它是 也可以通过遍历堆栈来重做一系列命令 向上并在每个命令上调用重做。