2012-03-28 6 views
0

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

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

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

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

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

Во всяком случае, если я попробую ...

model->revert(); 

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

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

ответ

2

Проверьте Qt's undo framework. Введение в документации говорит:

Undo Framework Qt является реализацией Command Pattern, для осуществления отмены/функциональные возможности повтора в приложениях.

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

+0

Благодарим вас, я посмотрю на него. – Fracu

+3

Это меньше ответ, чем предложение о том, как найти ответ. – neuronet