Название: [РЕШЕНО] Обновление данных модели во вьюхе Отправлено: boruh от Март 19, 2010, 10:54 Добрый день.
Столкнулся с непонятной проблемой: есть табличная модель и QTableView. В модели произвожу изменения структурного характера, которые в сущности сводятся к обычной сортировке данных с небольшими изменениями самих данных. И вот проблема - не обновляется вьюха. Т.е. она обновляет содержимое - меняются, например, цвета фона строк в соответствии с тем, как поменялись данные, но порядок строк остается неизменным. Посыл сигналов dataChanged и layoutChanged стоит, вызов методов beginRemoveRows/endRemoveRows и beginInsertRows/endInsertRows стоит - все вроде сделано по правильному. Однако ничего не помогает. Подскажите пожалуйста, что делать? Может быть я все таки что-то упустил из виду? Работаю с MVC не первый день, но раньше никогда не сталкивался с такой проблемой. Название: Re: Обновление данных модели во вьюхе Отправлено: alexman от Март 19, 2010, 10:59 QSortFilterProxyModel?
Название: Re: Обновление данных модели во вьюхе Отправлено: boruh от Март 19, 2010, 11:25 Нет, QSortFilterProxyModel не подходит потому, что как я уже написал помимо сортировки происходит и изменение данных. Т.е. могут добавиться/удалиться строки например.
Название: Re: Обновление данных модели во вьюхе Отправлено: MoPDoBoPoT от Март 19, 2010, 11:55 помимо сортировки происходит и изменение данных. Т.е. могут добавиться/удалиться строки например. При больших изменениях в модели, чтобы не дергать за dataChanged(), вызывают QAbstractItemModel::reset().Название: Re: Обновление данных модели во вьюхе Отправлено: boruh от Март 19, 2010, 12:18 да, знаю. Его тоже попробовал - не помогло.
Название: Re: Обновление данных модели во вьюхе Отправлено: voronElf от Март 19, 2010, 12:43 Очень странно. насколько я понимаю в MVC помимо добавления-удаления строк есть 3 способа для модели оповещать об изменениях данных: dataChanged() при изменении диапазона ячеек, layoutChanged при сильных изменениях (в том числе по структуре) , reset() - полная перезагрузка вида.
Делал несколько раз, все работает, подхватывается. Покажи код, можт чтото прояснится .... Название: Re: Обновление данных модели во вьюхе Отправлено: boruh от Март 19, 2010, 13:23 Вот я тоже в точности так думал и думаю, но код увы не работает.
Вот код метода, который производит изменение данных: Код: // формируем список групп и товаров Вот еще скриншот окна, на котором лежит вьюха, чтобы было еще лучше понятно что это за хозяйство. (http://img151.imageshack.us/img151/2830/screenshotbs.jpg) Название: Re: Обновление данных модели во вьюхе Отправлено: voronElf от Март 19, 2010, 14:10 для layoutChanged нужен еще layoutAboutToBeChanged() вначале, но эт не должно повлиять по идее.
Версия Qt - ? я так понял обсуждаемая вьюха слева ? вот пример моего рабочего кода: Код: void CTovTbModel::reloadData() { У меня тож случаются такие запарки, обычно все косячит из-за какой-нить мелочи в стиле: модель связал не с той вьюхой, сигнал отправить или сконектить забыл, в локальную переменную вписал, а не в поле объекта ... Находятся эти косячки в самых неожиданных местах. Проверь на эту тему. Название: Re: Обновление данных модели во вьюхе Отправлено: voronElf от Март 19, 2010, 14:24 в m_rows перед reset() нужные данные лежат ?
можно попробовать убрать все сигналы насчет вставки и удаления строк (если не пробовал еще) , оставить только layoutChanged или reset. Название: Re: Обновление данных модели во вьюхе Отправлено: boruh от Март 24, 2010, 12:23 Все, решил проблему. Как и предполагалось ошибка была тупейшая и в другом месте :)
Спасибо всем! |