Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: fear от Август 01, 2008, 15:09



Название: Дополнение существующей модели
Отправлено: fear от Август 01, 2008, 15:09
Существует модель, скажем model1. Задача состоит в том чтобы создать модель - model2, хранящую помимо собственных элементов, все элементы модели model1. При этом изменение/добавление/удаление элементов одной из моделей должны влиять на другую.

Над этим вопросом ломаю голову второй день, пытаюсь понять как это можно осуществить правильно, в духе qt`шного model/view подхода.


Название: Re: Дополнение существующей модели
Отправлено: Tonal от Август 01, 2008, 17:31
Этакая разновидность прокси. :)
Сильно зависит от того, как именно устроены эти модели.
Единственное, что можно почти однозначно посоветовать - model2 должна ловить сигналы model1 об изменениях в данных.


Название: Re: Дополнение существующей модели
Отправлено: fear от Август 01, 2008, 22:33
Единственное, что можно почти однозначно посоветовать - model2 должна ловить сигналы model1 об изменениях в данных.
не думаю что это будет хорошим решением, мне кажется, более элегантным будет решение, когда ссылка на model1 является свойством (элементом) класса model2, а методы data() и setData() класса model2 должны обеспечить работу с данными моделей как model2, так и model1. Таким образом model2 сможет непосредственно взаимодействовать с данными model1.

Вообще подобная задача возникает довольно часто, наверняка решение уже имеется, вот только какое?  ??? :)


Название: Re: Дополнение существующей модели
Отправлено: Tonal от Август 02, 2008, 07:47
Про ссылку и model2.data() и model2.setData это и так понятно. :)
Подумай, что будет происходить, когда кто-то дёрнет model1.setData?


Название: Re: Дополнение существующей модели
Отправлено: fear от Август 02, 2008, 15:55
Подумай, что будет происходить, когда кто-то дёрнет model1.setData?
Сигналы моделей можно конечно связать, но это будет задачей не из легких, т.к. придется как-то обеспечить взаимосвязь индексов model2 и model1.
Другим решением может быть определение model2 как QProxyModel, взаимодействующей с model1 и имеющей при этом свои элементы. В этом случае, если правильно подменять индексы model1 в классе model2 можно добиться решения задачи без переопределения сигналов. Дело за малым, понять как это сделать, и возможно ли это   :) ???