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

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

Страниц: [1] 2 3 ... 5   Вниз
  Печать  
Автор Тема: Совет по дизайну. Две модели для данных  (Прочитано 33599 раз)
UVV
Гость
« : Сентябрь 20, 2014, 11:25 »

Привет.
Есть данные, над которыми 2 модели для разного отображения.
У меня закрались сомнения, что данный дизайн правильный, поскольку обновление данных в одной модели, нужно как-то обновить вторую модель (сейчас делается просто reset). Чтобы вы посоветовали? Как принято делать в этом случае?
Спасибо.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Сентябрь 20, 2014, 15:44 »

а что мешает использовать одну модель? побольше бы подробностей Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
UVV
Гость
« Ответ #2 : Сентябрь 20, 2014, 16:39 »

а что мешает использовать одну модель? побольше бы подробностей Улыбающийся
Так данные отображаются по-разному. rowCount() и data() по-разному реализованы и редактирование по-другому выглядит.
Записан
Bepec
Гость
« Ответ #3 : Сентябрь 20, 2014, 16:42 »

Отображение суть роль View, а никак не модели.
Если у вас данные одинаковые, но разное отображение - вам надо менять View а не Model.

А так да - мало данных, нет кода, советовать нет смысла.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Сентябрь 20, 2014, 17:24 »

2 экземпляра данных - принципиально неверно, хоть с MVC хоть как
Записан
UVV
Гость
« Ответ #5 : Сентябрь 21, 2014, 22:30 »

2 экземпляра данных - принципиально неверно, хоть с MVC хоть как
Экземпляр данных один, указатель на данные в модели. Просто когда данные меняются из одной модели, другую нужно как-то уведомить, что данные изменились.
Записан
UVV
Гость
« Ответ #6 : Сентябрь 21, 2014, 22:34 »

Отображение суть роль View, а никак не модели.
Если у вас данные одинаковые, но разное отображение - вам надо менять View а не Model.
Тем не менее информацию о столбцах, строках и т.п. выдаёт модель, а не view.

А так да - мало данных, нет кода, советовать нет смысла.
Есть QByteArray. В одной модели он отображается и редактируется как hex, в другой, как bin. Сам массив данных хранится ессно не в модели, а в каждую из моделей передаётся указатель на один и тот же массив.
Записан
Bepec
Гость
« Ответ #7 : Сентябрь 22, 2014, 10:07 »

У вас проблема с архитектурой.
Модель должна отдавать QByteArray. В любом из случаев.
Делегат должен меняться. И именно в нём обрабатывать данные как вам нужно.
В результате получается 1 модель, 1 View, 2 делегата.
Записан
UVV
Гость
« Ответ #8 : Сентябрь 22, 2014, 11:44 »

У вас проблема с архитектурой.
Поэтому и тред =)
Модель должна отдавать QByteArray. В любом из случаев.
Делегат должен меняться. И именно в нём обрабатывать данные как вам нужно.
В результате получается 1 модель, 1 View, 2 делегата.
Что значит модель должна отдавать? из data() возвращать?
Т.е. заголовки/размер столбцов, отображение данных - это не из модели возвращать? Я думал тут 2 View надо...
Записан
Bepec
Гость
« Ответ #9 : Сентябрь 22, 2014, 12:02 »

Смотри...
Model хранит данные.
View запрашивает данные.
Делегат отрисовывает что-то на основе данных.

Вот так работает система.
Записан
UVV
Гость
« Ответ #10 : Сентябрь 22, 2014, 13:58 »

А как же rowCount() and columnCount()? Модель же их отдаёт. Для hex и bin они разные у меня. Что делать в этом случае?
Записан
vizir.vs
Гость
« Ответ #11 : Сентябрь 22, 2014, 14:13 »

Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
« Последнее редактирование: Сентябрь 22, 2014, 14:19 от vizir.vs » Записан
UVV
Гость
« Ответ #12 : Сентябрь 22, 2014, 14:29 »

Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
Я нигде не говорил, что данные разные. К примеру, в случае hex у меня будет 16 столбцов, а в случае bin - только 8.
Записан
vizir.vs
Гость
« Ответ #13 : Сентябрь 22, 2014, 14:39 »

Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
Я нигде не говорил, что данные разные. К примеру, в случае hex у меня будет 16 столбцов, а в случае bin - только 8.

Модель ни чего не знает о количестве столбцов, будет ли это таблица, или график, или еще что-нибудь. У нее есть данные, а вьювер эти данные уже отображает. В твоем случае, например, у тебя есть массив из 32 чисел. Хекс должен этот массив интерпретировать как таблица из 16 столбоцов, а бин - как таблица из 8 столбцов. Модель на таблицу ни как не влияет. Может ты захочешь сделать еще один вьювер хекс-бин, который будет отображать в виде графика.
Записан
UVV
Гость
« Ответ #14 : Сентябрь 22, 2014, 14:50 »

Модель ни чего не знает о количестве столбцов, будет ли это таблица, или график, или еще что-нибудь. У нее есть данные, а вьювер эти данные уже отображает. В твоем случае, например, у тебя есть массив из 32 чисел. Хекс должен этот массив интерпретировать как таблица из 16 столбоцов, а бин - как таблица из 8 столбцов. Модель на таблицу ни как не влияет. Может ты захочешь сделать еще один вьювер хекс-бин, который будет отображать в виде графика.

Ну так вот этот-то метод в модели http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#columnCount , а не во view.
Можно немного поподробнее, пжлста, как мне объединить эти 2 модели в одну.
Записан
Страниц: [1] 2 3 ... 5   Вверх
  Печать  
 
Перейти в:  


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