QTableView QStandardItemModel恢复或撤消用户输入

时间:2012-03-28 00:50:11

标签: c++ qt qabstractitemmodel qstandarditemmodel

如何在QStandarItemModel弹出的QTableView上撤消或恢复用户条目?

我已将dataChanged信号与处理程序连接,我在其中验证数据......

connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(validateData(QModelIndex,QModelIndex)));

...但是如果用户输入错误,我想将用户条目恢复或撤消到该项目的上一个值。

我已经阅读了从QAbstractItemModel继承的revert()成员,但我无法理解它是如何工作的。文档说“让模型知道它应该丢弃缓存的信息。”但我不确定用户输入的数据是缓存还是已存储在模型中。

无论如何,如果我尝试......

model->revert();

...错误的用户输入后,它不起作用。

提前致谢!

1 个答案:

答案 0 :(得分:2)

查看Qt的undo framework。文件中的介绍说:

  

Qt的Undo Framework是Command Pattern的一个实现,   用于在应用程序中实现撤消/重做功能。

     

Command模式基于所有编辑的想法   应用程序通过创建命令对象的实例来完成。命令   对象将更改应用于文档并存储在命令中   堆。此外,每个命令都知道如何撤消其更改   将文档恢复到以前的状态。只要了   应用程序仅使用命令对象来更改状态   在文档中,可以通过遍历来撤消一系列命令   向下堆栈并依次调用每个命令的undo。它是   也可以通过遍历堆栈来重做一系列命令   向上并在每个命令上调用重做。