Название: Модель-представление. Варианты реализации. Отправлено: Zealot от Декабрь 17, 2008, 23:55 Посоветуйте варианты реализации вот для такой вот штуковины:
Имеем дом-модель xml документа. Необходимо: При просмотре в дереве (QTreeView) - в качестве элементов отображает имена узлов(QDomNode) (т.е. отображаем структуру документа). При просмотре в списке (QListView) - в качестве элементов выводит xml код каждого узла (т.е. получается копия документа XML только в виде списка). Пример: XML: <node1 arg="foo"> <node2 arg="foo"/> ... </node1> QTreeView: +node1 |-+node2 ... QListView: <node1 arg="foo"> <node2 arg="foo"/> ... </node1> Есть некоторые соображения по решению данной задачи, но хотелось бы посоветоваться, вдруг есть получше. Пока думаю использовать различную роль: QVariant DomModel::data(const QModelIndex &index, int role) const { switch(role) { case Qt::DisplayRole: return имяУзла; break; case Qt::ToolTipRole: return хмлПредставлениеУзла; break; default: return QVariant(); } } И переопределить в наследнике QListView отображение с Qt::DisplayRole на Qt::ToolTipRole. Только что-то этот способ кажется очень топорным. Думаю есть более изящные способы, только никак не могу к ним придти.... Название: Re: Модель-представление. Варианты реализации. Отправлено: Racheengel от Декабрь 18, 2008, 12:05 думаю, надо делать 2 модели.
Либо одну базовую, а вторую - через прокси-модель из первой. Название: Re: Модель-представление. Варианты реализации. Отправлено: Zealot от Декабрь 18, 2008, 21:10 Тогда, в случае изменения одной модели, необходимо также модифицировать другую. А если придется использовать третье представление, например таблицу, то еще +1.
Или есть способы синхронизации данных в двух моделях? Название: Re: Модель-представление. Варианты реализации. Отправлено: spirit от Декабрь 18, 2008, 21:22 использовать прокси-модель
Название: Re: Модель-представление. Варианты реализации. Отправлено: Zealot от Декабрь 19, 2008, 08:49 Спасибо! Сегодня по-изучаю прокси-модель заодно и попробую реализовать с помощью нее.
Название: Re: Модель-представление. Варианты реализации. Отправлено: Racheengel от Декабрь 19, 2008, 11:12 Можно не хранить данные в модели, а только отображать посредством методов data(...).
Например, отдельно хранить XML документ, а обоим моделям передать поинтер на него. Тогда при изменении документа, нужно будет просто вызвать метод обновления моделей, и все. Название: Re: Модель-представление. Варианты реализации. Отправлено: Zealot от Декабрь 19, 2008, 19:16 Можно не хранить данные в модели, а только отображать посредством методов data(...). Точно. Ведь в архитектуре модель - представления не сказано,Например, отдельно хранить XML документ, а обоим моделям передать поинтер на него. Тогда при изменении документа, нужно будет просто вызвать метод обновления моделей, и все. что модель данных должна содержать в себе сами данные. Получается, что модель данных это что-то вроде выборки данных определенным образом. Единственное только тогда не понятно, что предпочтительнее использовать: встроенные средства(QProxyModel) или такие хитрухи, как указатели на данные вместо самих данных? Название: Re: Модель-представление. Варианты реализации. Отправлено: spirit от Декабрь 19, 2008, 19:19 я считаю, что кэшировать данные в модели не есть плохо.
Название: Re: Модель-представление. Варианты реализации. Отправлено: Zealot от Декабрь 19, 2008, 19:28 Я б и сам определился что лучше, а что хуже но поскольку только начал изучение данной архитектуры еще не прочувствовал ее как следует. Нужно посмотреть возможности моделей на конкретных реализациях. Есть какие-нибудь примеры помимо кьютешных стандартных? Или статьи по-подробней? А то 2 абзаца кьютешной документации по прокси-моделям совсем не раскрывают их тайный смысл.
|