Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Alex_cs_gsp от Август 23, 2010, 20:46



Название: Архитектура модель-представление. Модель - контейнер или интерфейс?
Отправлено: Alex_cs_gsp от Август 23, 2010, 20:46
Читаю Шлее, вот код, который вызвал вопрос
Код:
QStringListModel model;
model.setStringList(QStringList() << "First string" <<"Second" <<"Third string");

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



Название: Re: Архитектура модель-представление. Модель - контейнер или интерфейс?
Отправлено: BRE от Август 23, 2010, 20:48
Модель это контейнер.


Название: Re: Архитектура модель-представление. Модель - контейнер или интерфейс?
Отправлено: Alex_cs_gsp от Август 23, 2010, 20:57
Что-то я тогда попутал. В книге прямым текстом сказано - " модель - оболочка вокруг исходных данных, что мы работаем с моделью данных и дублирование не происходит". Если это контейнер, то я не понимаю зачем нужно было так мудрить. Почему нельзя просто было все Qt контейнеры вывести (наследованием) из абстрактной модели???


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

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




Название: Re: Архитектура модель-представление. Модель - контейнер или интерфейс?
Отправлено: lit-uriy от Август 24, 2010, 11:26
ещё модель может брать данные из другой модели, пример - QSortFilterProxyModel (http://doc.crossplatform.ru/qt/4.6.x/model-view-proxy-models.html)


Название: Re: Архитектура модель-представление. Модель - контейнер или интерфейс?
Отправлено: vipet от Август 24, 2010, 16:28
Что-то я тогда попутал. В книге прямым текстом сказано - " модель - оболочка вокруг исходных данных, что мы работаем с моделью данных и дублирование не происходит". Если это контейнер, то я не понимаю зачем нужно было так мудрить. Почему нельзя просто было все Qt контейнеры вывести (наследованием) из абстрактной модели???

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

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

А класс QStringListModel значит сам хранит в себе данные.