0

如何撤消或还原 QStdarItemModel 填充的 QTableView 上的用户条目?

我已将 dataChanged 信号与我验证数据的处理程序连接...

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

...但是如果用户输入错误,我想将用户输入恢复或撤消到项目的先前值。

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

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

model->revert();

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

提前致谢!

4

1 回答 1

2

查看 Qt 的撤消框架。文档中的介绍说:

Qt 的撤消框架是命令模式的实现,用于在应用程序中实现撤消/重做功能。

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

于 2012-03-28T06:44:05.830 回答