Название: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ? Отправлено: 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 Да точно лучше получится, реализация несложная, делал проксю на произвольное количество фильтров по значению строки, работоло быстро.
|