Russian Qt Forum

Qt => Model-View (MV) => Тема начата: unkeep от Апрель 09, 2014, 18:00



Название: [РЕШЕНО] отношение QAbstactItemModel к асинхронно полученным данным.
Отправлено: unkeep от Апрель 09, 2014, 18:00
есть сервак. Асинхронно получаем с него данные.
как лучше реализовывать QAbstactItemModel?
 
1) хранить в модели копию полученных данных. При получении с сервака новых\изменённых данных  - добавлять\обновлять их и у модели.
2) хранить в модели указатель\ссылку на кеш данных. При получении с сервака новых\изменённых данных  - сообщать ей что кеш изменился и надо бы перестроиться.
3) хранить в модели объект данных, который сам сообщает ей о том что он изменился.
4) реализовать модель так, чтобы она не хранила данные вообще. Может как-то соединить data(QModelIndex&) c запросом на сервер...
5) ещё что-нибудь, до чего я не додумался...

может знает кто удачные решения сей задачи? Может паттерн есть какой?


Название: Re: отношение QAbstactItemModel к асинхронно полученным данным.
Отправлено: Old от Апрель 09, 2014, 18:22
Получать данные с сервера при каждом обновлении экрана - это слишком расточительно, данные все равно придется кешировать.
Хранить данные внутри или снаружи модели зависит от того, нужны ли эти данные без модели. Если возможны режимы работы программы без отображения данных (или вообще без GUI), то наверное лучше иметь внешнее хранилище из которого модель берет данные.
Вариантов много, добавьте конкретики. :)


Название: Re: отношение QAbstactItemModel к асинхронно полученным данным.
Отправлено: Bepec от Апрель 09, 2014, 18:47
В начале брать всё, потом получать только изменения.


Название: Re: отношение QAbstactItemModel к асинхронно полученным данным.
Отправлено: unkeep от Апрель 09, 2014, 23:43
Получать данные с сервера при каждом обновлении экрана - это слишком расточительно, данные все равно придется кешировать.
Хранить данные внутри или снаружи модели зависит от того, нужны ли эти данные без модели. Если возможны режимы работы программы без отображения данных (или вообще без GUI), то наверное лучше иметь внешнее хранилище из которого модель берет данные.
Вариантов много, добавьте конкретики. :)

есть данные которые отображаются в двух вьюхах. В них есть общая часть. +могут всплывать диалоги, которые тоже отображают какие-то данные. И да, хотелось бы не завязываться жёстко на гуи.
Значит внешенее хранилище. Хорошо. Остаётся определиться как модель будет узнавать о его изменении. Вижу два варианта: 1) viewModel имеет указатель на хранилище, то в свою очередь сигнализирует о любых изменениях. Внутри моделей ловим сигналы и обрабатываем. 2)хранилище просто структура данных. Тот кто его изменяет должен сообщить это моделям.
1?


Название: Re: отношение QAbstactItemModel к асинхронно полученным данным.
Отправлено: Old от Апрель 10, 2014, 07:38
Да, модель содержит ссылку на хранилище и берет из него данные. Хранилище сигналит о любых изменениях, модель получает эти сигналы и генерирует уже свои для вьюшки.