Russian Qt Forum
Ноябрь 27, 2024, 12:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: как правильнее вызывать model->revertAll();  (Прочитано 3532 раз)
ranet
Гость
« : Март 10, 2009, 17:15 »

Для ввода/изменения данных использую модальный диалог. Возможна ситуация, когда юзверь чего-нибудь изменит, но потом передумает, и попытается диалог закрыть. Я поставил фильтр событий, к-рый отлавливает запрос на закрытие диалога, и тупо написал в обработчике :
    if (event->type() == QEvent::Hide)
    {
       model->revertAll();
        return true;
    }
Срабатывает корректно, но может правильно добавить еще и проверку, находится ли модель в режиме редактирования? Или такая проверка этой функцией самой делается, судя по её поведению?
Записан
ритт
Гость
« Ответ #1 : Март 10, 2009, 23:57 »

раз диалог модальный, зачем вешать фильтр событий?
не проще ли:
Код:
    if (!dialog.exec())
       model->revertAll();
?

а по теме - разве у модели есть режим редактирования? Улыбающийся
Записан
ranet
Гость
« Ответ #2 : Март 11, 2009, 10:57 »

Немножко подробней:
нажал пользователь "добавить", появился диалог добавления (с LineEdit'ами, привинченными через mapper к модели), одновременно выполнена команда model->insertRow(row);
функция
model->submitAll();
пока не вызывалась, она будет вызвана по нажатию пользователем кнопки "сохранить", когда он закончит вводить данные.
Это состояние я и назвал "режимом редактирования модели" возможно не слишком удачно.. Данные изменены в модели, но еще не зафиксированы в базе.
Если он сейчас вместо "сохранить" закроет диалог, то нужно вызвать model->revertAll(); Вот я и сделал перехват события, чтобы независимо от способа и момента закрытия диалога пользователем всегда выполнялось  model->revertAll();
Правда если нажали "сохранить", то диалог тоже прячется, вызывается model->submitAll();  и тоже срабатывает model->revertAll(); Вот я и спросил, хорошо ли так делать или в этом косяк какой есть. Работает нормально, но вдруг..
Записан
ranet
Гость
« Ответ #3 : Март 11, 2009, 11:12 »

сформулирую вопрос совсем коротко:
если было
model->insertRow(row);
и мы вызвали
model->revertAll();
то все понятно.
А если
model->insertRow(row);
не было, или после него мы УЖЕ вызвали
model->submitAll();
выполнение model->revertAll(); вроде безвредно проходит.. Но хорошо ли это?
Записан
ритт
Гость
« Ответ #4 : Март 14, 2009, 14:20 »

нормально
Записан
ranet
Гость
« Ответ #5 : Март 16, 2009, 10:14 »

Спасибо, оставляю так:)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.235 секунд. Запросов: 20.