QTableView QStandardItemModel revert or undo user entry

不问归期 提交于 2019-12-13 04:19:48

问题


How can I undo or revert an user entry on a QTableView popuplated by QStandarItemModel?

I have connected dataChanged signal with a handler where I validate the data...

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

...but in case user entry is wrong I want to revert or undo the user entry to the previous value of the item.

I have read about revert() member inherited from QAbstractItemModel but I can't understand how it works exactly. Documentation says "Lets the model know that it should discard cached information." but I'm not sure whether the data the user entered is cached or is already stored on the model.

Anyway if I try...

model->revert();

...after a wrong user entry it does not work.

Thanks in advance!


回答1:


Check out Qt's undo framework. The introduction at the documentation says:

Qt's Undo Framework is an implementation of the Command Pattern, for implementing undo/redo functionality in applications.

The Command pattern is based on the idea that all editing in an application is done by creating instances of command objects. Command objects apply changes to the document and are stored on a command stack. Furthermore, each command knows how to undo its changes to bring the document back to its previous state. As long as the application only uses command objects to change the state of the document, it is possible to undo a sequence of commands by traversing the stack downwards and calling undo on each command in turn. It is also possible to redo a sequence of commands by traversing the stack upwards and calling redo on each command.



来源:https://stackoverflow.com/questions/9899735/qtableview-qstandarditemmodel-revert-or-undo-user-entry

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!