QTableView QStandardItemModel отменить или отменить ввод пользователя
Как я могу отменить или отменить пользовательскую запись в QTableView, заполненную QStandarItemModel?
Я связал dataChanged сигнал с обработчиком, где я проверяю данные...
connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(validateData(QModelIndex,QModelIndex)));
... но в случае неправильного ввода пользователя я хочу вернуть или отменить ввод пользователя к предыдущему значению элемента.
Я читал о члене revert(), унаследованном от QAbstractItemModel, но я не могу понять, как именно он работает. Документация гласит: "Позволяет модели знать, что она должна отбрасывать кэшированную информацию". но я не уверен, кэшированы ли введенные пользователем данные или уже сохранены в модели.
Во всяком случае, если я попытаюсь...
model->revert();
... после неправильного входа пользователя это не работает.
Заранее спасибо!
1 ответ
Проверьте рамки отмены Qt. Введение в документации говорит:
Инфраструктура отмены Qt является реализацией шаблона команд, предназначенного для реализации функций отмены / повтора в приложениях.
Шаблон Command основан на идее, что все редактирование в приложении выполняется путем создания экземпляров объектов команды. Командные объекты применяют изменения к документу и хранятся в стеке команд. Кроме того, каждая команда знает, как отменить свои изменения, чтобы вернуть документ в предыдущее состояние. Пока приложение использует только объекты команд для изменения состояния документа, можно отменить последовательность команд, обойдя стек вниз и вызывая отмену для каждой команды по очереди. Также возможно повторить последовательность команд, пройдя вверх по стеку и вызывая повтор для каждой команды.