QTableView QStandardItemModel вернуть или отменить ввод пользователя

Как я могу отменить или вернуть запись пользователя в QTableView, заполненную QStandarItemModel?

Я подключил сигнал dataChanged к обработчику, где я проверяю данные...

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

... но в случае неправильной записи пользователя я хочу вернуть или отменить ввод пользователя к предыдущему значению элемента.

Я читал о члене revert(), унаследованном от QAbstractItemModel, но я не могу понять, как именно он работает. В документации говорится: «Сообщает модели, что она должна отбрасывать кэшированную информацию». но я не уверен, кэшируются ли данные, введенные пользователем, или они уже сохранены в модели.

В любом случае, если я попытаюсь...

model->revert();

... после неправильного ввода пользователя это не работает.

Заранее спасибо!


person Fracu    schedule 28.03.2012    source источник


Ответы (1)


Ознакомьтесь с структурой отмены Qt. Во введении в документации говорится:

Undo Framework Qt — это реализация шаблона команд для реализации функций отмены/возврата в приложениях.

Шаблон Command основан на идее, что все редактирование в приложении выполняется путем создания экземпляров объектов команд. Объекты команд применяют изменения к документу и сохраняются в стеке команд. Кроме того, каждая команда знает, как отменить свои изменения, чтобы вернуть документ в прежнее состояние. Пока приложение использует объекты-команды только для изменения состояния документа, можно отменить последовательность команд, перемещаясь по стеку вниз и вызывая отмену для каждой команды по очереди. Также можно повторить последовательность команд, перемещаясь по стеку вверх и вызывая повтор для каждой команды.

person Community    schedule 28.03.2012
comment
Спасибо, sobingt, я посмотрю на это. - person Fracu; 04.04.2012
comment
Это не столько ответ, сколько предложение о том, как найти ответ. - person eric; 06.03.2015