Russian Qt Forum
Ноябрь 23, 2024, 04:27
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Совет по дизайну. Две модели для данных
Страниц: [
1
]
2
3
...
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Совет по дизайну. Две модели для данных (Прочитано 33520 раз)
UVV
Гость
Совет по дизайну. Две модели для данных
«
:
Сентябрь 20, 2014, 11:25 »
Привет.
Есть данные, над которыми 2 модели для разного отображения.
У меня закрались сомнения, что данный дизайн правильный, поскольку обновление данных в одной модели, нужно как-то обновить вторую модель (сейчас делается просто reset). Чтобы вы посоветовали? Как принято делать в этом случае?
Спасибо.
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Совет по дизайну. Две модели для данных
«
Ответ #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
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #2 :
Сентябрь 20, 2014, 16:39 »
Цитата: kambala от Сентябрь 20, 2014, 15:44
а что мешает использовать одну модель? побольше бы подробностей
Так данные отображаются по-разному. rowCount() и data() по-разному реализованы и редактирование по-другому выглядит.
Записан
Bepec
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #3 :
Сентябрь 20, 2014, 16:42 »
Отображение суть роль View, а никак не модели.
Если у вас данные одинаковые, но разное отображение - вам надо менять View а не Model.
А так да - мало данных, нет кода, советовать нет смысла.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Совет по дизайну. Две модели для данных
«
Ответ #4 :
Сентябрь 20, 2014, 17:24 »
2 экземпляра данных - принципиально неверно, хоть с MVC хоть как
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #5 :
Сентябрь 21, 2014, 22:30 »
Цитата: Igors от Сентябрь 20, 2014, 17:24
2 экземпляра данных - принципиально неверно, хоть с MVC хоть как
Экземпляр данных один, указатель на данные в модели. Просто когда данные меняются из одной модели, другую нужно как-то уведомить, что данные изменились.
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #6 :
Сентябрь 21, 2014, 22:34 »
Цитата: Bepec от Сентябрь 20, 2014, 16:42
Отображение суть роль View, а никак не модели.
Если у вас данные одинаковые, но разное отображение - вам надо менять View а не Model.
Тем не менее информацию о столбцах, строках и т.п. выдаёт модель, а не view.
Цитата: Bepec от Сентябрь 20, 2014, 16:42
А так да - мало данных, нет кода, советовать нет смысла.
Есть QByteArray. В одной модели он отображается и редактируется как hex, в другой, как bin. Сам массив данных хранится ессно не в модели, а в каждую из моделей передаётся указатель на один и тот же массив.
Записан
Bepec
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #7 :
Сентябрь 22, 2014, 10:07 »
У вас проблема с архитектурой.
Модель должна отдавать QByteArray. В любом из случаев.
Делегат должен меняться. И именно в нём обрабатывать данные как вам нужно.
В результате получается 1 модель, 1 View, 2 делегата.
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #8 :
Сентябрь 22, 2014, 11:44 »
Цитата: Bepec от Сентябрь 22, 2014, 10:07
У вас проблема с архитектурой.
Поэтому и тред =)
Цитата: Bepec от Сентябрь 22, 2014, 10:07
Модель должна отдавать QByteArray. В любом из случаев.
Делегат должен меняться. И именно в нём обрабатывать данные как вам нужно.
В результате получается 1 модель, 1 View, 2 делегата.
Что значит модель должна отдавать? из data() возвращать?
Т.е. заголовки/размер столбцов, отображение данных - это не из модели возвращать? Я думал тут 2 View надо...
Записан
Bepec
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #9 :
Сентябрь 22, 2014, 12:02 »
Смотри...
Model хранит данные.
View запрашивает данные.
Делегат отрисовывает что-то на основе данных.
Вот так работает система.
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #10 :
Сентябрь 22, 2014, 13:58 »
А как же rowCount() and columnCount()? Модель же их отдаёт. Для hex и bin они разные у меня. Что делать в этом случае?
Записан
vizir.vs
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #11 :
Сентябрь 22, 2014, 14:13 »
Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
«
Последнее редактирование: Сентябрь 22, 2014, 14:19 от vizir.vs
»
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #12 :
Сентябрь 22, 2014, 14:29 »
Цитата: vizir.vs от Сентябрь 22, 2014, 14:13
Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
Я нигде не говорил, что данные разные. К примеру, в случае hex у меня будет 16 столбцов, а в случае bin - только 8.
Записан
vizir.vs
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #13 :
Сентябрь 22, 2014, 14:39 »
Цитата: Vyacheslav Yurkov от Сентябрь 22, 2014, 14:29
Цитата: vizir.vs от Сентябрь 22, 2014, 14:13
Как модель может отдавать разные данные, если она одна? Модель должна отдавать одинаковые данные, а вьювер будет отображать эти данные как тебе надо. Интерпритация данных будет на стороне вьювера
Я нигде не говорил, что данные разные. К примеру, в случае hex у меня будет 16 столбцов, а в случае bin - только 8.
Модель ни чего не знает о количестве столбцов, будет ли это таблица, или график, или еще что-нибудь. У нее есть данные, а вьювер эти данные уже отображает. В твоем случае, например, у тебя есть массив из 32 чисел. Хекс должен этот массив интерпретировать как таблица из 16 столбоцов, а бин - как таблица из 8 столбцов. Модель на таблицу ни как не влияет. Может ты захочешь сделать еще один вьювер хекс-бин, который будет отображать в виде графика.
Записан
UVV
Гость
Re: Совет по дизайну. Две модели для данных
«
Ответ #14 :
Сентябрь 22, 2014, 14:50 »
Цитата: vizir.vs от Сентябрь 22, 2014, 14:39
Модель ни чего не знает о количестве столбцов, будет ли это таблица, или график, или еще что-нибудь. У нее есть данные, а вьювер эти данные уже отображает. В твоем случае, например, у тебя есть массив из 32 чисел. Хекс должен этот массив интерпретировать как таблица из 16 столбоцов, а бин - как таблица из 8 столбцов. Модель на таблицу ни как не влияет. Может ты захочешь сделать еще один вьювер хекс-бин, который будет отображать в виде графика.
Ну так вот этот-то метод в модели
http://qt-project.org/doc/qt-4.8/qabstractitemmodel.html#columnCount
, а не во view.
Можно немного поподробнее, пжлста, как мне объединить эти 2 модели в одну.
Записан
Страниц: [
1
]
2
3
...
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...