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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Архитектура модель-представление. Модель - контейнер или интерфейс?  (Прочитано 3941 раз)
Alex_cs_gsp
Гость
« : Август 23, 2010, 20:46 »

Читаю Шлее, вот код, который вызвал вопрос
Код:
QStringListModel model;
model.setStringList(QStringList() << "First string" <<"Second" <<"Third string");

Если модель - интерфейс, то вышеприведенный код должен привести к ошибки, ведь объект QStringList() стековый, и после потери области видимости будет уничтожен. Однако вышеприведенный код работает  - выходит, что модель копирует (дублирует) данные, т.е. все-таки контейнер??? Прошу ответить по-подробнее.
 
Спасибо!

Записан
BRE
Гость
« Ответ #1 : Август 23, 2010, 20:48 »

Модель это контейнер.
Записан
Alex_cs_gsp
Гость
« Ответ #2 : Август 23, 2010, 20:57 »

Что-то я тогда попутал. В книге прямым текстом сказано - " модель - оболочка вокруг исходных данных, что мы работаем с моделью данных и дублирование не происходит". Если это контейнер, то я не понимаю зачем нужно было так мудрить. Почему нельзя просто было все Qt контейнеры вывести (наследованием) из абстрактной модели???
Записан
BRE
Гость
« Ответ #3 : Август 23, 2010, 21:07 »

Что-то я тогда попутал. В книге прямым текстом сказано - " модель - оболочка вокруг исходных данных, что мы работаем с моделью данных и дублирование не происходит". Если это контейнер, то я не понимаю зачем нужно было так мудрить. Почему нельзя просто было все Qt контейнеры вывести (наследованием) из абстрактной модели???
Можно хранить данные в самой модели, как это делает QStringListModel (у нее внутри есть свой объект QStringList для хранения строк) или модель может брать данные из внешних источников (как SQL-модели). Можно написать свою модель, которая будет получать данные по сети.

Для view модель является источником данных, а как это будет организовано в модели, дело самой модели.


Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Август 24, 2010, 11:26 »

ещё модель может брать данные из другой модели, пример - QSortFilterProxyModel
Записан

Юра.
vipet
Бывалый
*****
Offline Offline

Сообщений: 452


Просмотр профиля
« Ответ #5 : Август 24, 2010, 16:28 »

Что-то я тогда попутал. В книге прямым текстом сказано - " модель - оболочка вокруг исходных данных, что мы работаем с моделью данных и дублирование не происходит". Если это контейнер, то я не понимаю зачем нужно было так мудрить. Почему нельзя просто было все Qt контейнеры вывести (наследованием) из абстрактной модели???

Модель - оболочка вокруг исходных данных. Все правильно!

Это относится к QAbstractItemModel и видимо к другим классам абстрактных моделей (для того же List'а, давно их не юзал.)

А класс QStringListModel значит сам хранит в себе данные.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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