Russian Qt Forum

Qt => Model-View (MV) => Тема начата: voronElf от Января 15, 2010, 10:09



Название: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: voronElf от Января 15, 2010, 10:09
Всем привет.

Есть цепочка моделей (QSortFilterProxyModel), предыдущая является источником данных для следующей. Ну и первая подцеплена к другой модели, в которой данные, а последню проксю повешана вьюха. В каждой прокси модели свой критерий фильтрации.

Нужно изменить/сбросить фильтры всех/нескольких прокси-моделей одновременно. Вызываю по-порядку setFilter...() для каждой. Я так понимаю каждый такой вызов заставляет следующие по порядку далее прокси-модели и вьюху обновлять данные, измененные в источнике (при этом в прокси-моделях свои фильтры отрабатывают). Вызываю например 3 раза setFilter...(), отрабатывают 3 цепочки обновления данных. А хотелось бы сначала изменить критерии фильтров, а потом чтобы данные обновились 1 раз, общий для всех.

Подскажите как реализовать или в какую сторону доки копнуть ?


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: Авварон от Января 15, 2010, 11:29
сделать 1 проксю


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: voronElf от Января 18, 2010, 06:32
хороший вариант, только критерии фильтрации слишком разные (все модели наследованы и переопределены функции фильтрации ), плюсом нужен функционал как в яндексе галочка "искать в найденном", т.е. длина цепочки меняется. Поэтому вопрос остается.


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: DS_tm от Января 18, 2010, 12:31
blockSignals не прокатит?

А вообще, Авварон прав, лучший способ оптимизации использование одной прокси.
Вешенье одной прокси на другую хороший повод пересмотреть архитектуру.


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: Авварон от Января 18, 2010, 13:16
просто сорт прокси модель она мало того что иногда глючит, так еще и жутко тормозит... В принципе ваш выбор понятен - прокси удобно подменять, но в данном случае есть одно действие - фильтр, задаваемый разными параметрами.
Как вариант еще можно отключать модели, настраивать а потом подключать, но всё равно при отключении/подключении будет та же проблема.


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: voronElf от Января 19, 2010, 07:06
Как доберусь до оптимизации этого места, попробую с blockSignals поэкспериментировать.

Насчет одной прокси - сам хочу так сделать, только вот фильтры такие (это для каталога товаров идет):
1. есть-нет на складе
2. есть-нет доп. скидка
3. по тов. группе
4. по торг. марке
5. по regExp в несколько уровней по разным столбцам

Пока писал понял, что ничего страшного, пожалуй упакую все это в одну проксю, фильтр по regExp -ам в QMap засуну да итератором пробегаться. Попробую, проверю


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: Авварон от Января 19, 2010, 08:36
если совсем извращаться,то можно на каждый фильтр сделать класс-обертку и в проксе оперировать со списком таких классов. Та же цепочка, но прокся одна.


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: voronElf от Января 19, 2010, 11:59
Да, как вариант.
Только сама по себе эта цепочка появилась из-за реализации фильтра №5 (чтоб делать поиск в найденном) а тут прокатает QMap RegExp-ов, а остальные фильтры можно и кучей if -ов сделать в filterAcceptsRow (можт даже лучше получится, не тратить ресурсы на лишние вызовы функций и обход итераторов)


Название: Re: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?
Отправлено: DS_tm от Января 19, 2010, 18:22
Да точно лучше получится, реализация несложная, делал проксю на произвольное количество фильтров по значению строки, работоло быстро.