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

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

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

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

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

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

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

model->revert();

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

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

1 ответ

Решение

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

Инфраструктура отмены Qt является реализацией шаблона команд, предназначенного для реализации функций отмены / повтора в приложениях.

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

Другие вопросы по тегам