Russian Qt Forum
Ноябрь 24, 2024, 14:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Цепочка прокси-моделей. Общий сброс фильтров. Можно оптимизировать ?  (Прочитано 5913 раз)
voronElf
Гость
« : Январь 15, 2010, 10:09 »

Всем привет.

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

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

Подскажите как реализовать или в какую сторону доки копнуть ?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Январь 15, 2010, 11:29 »

сделать 1 проксю
Записан
voronElf
Гость
« Ответ #2 : Январь 18, 2010, 06:32 »

хороший вариант, только критерии фильтрации слишком разные (все модели наследованы и переопределены функции фильтрации ), плюсом нужен функционал как в яндексе галочка "искать в найденном", т.е. длина цепочки меняется. Поэтому вопрос остается.
Записан
DS_tm
Гость
« Ответ #3 : Январь 18, 2010, 12:31 »

blockSignals не прокатит?

А вообще, Авварон прав, лучший способ оптимизации использование одной прокси.
Вешенье одной прокси на другую хороший повод пересмотреть архитектуру.
« Последнее редактирование: Январь 18, 2010, 13:29 от DS_tm » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Январь 18, 2010, 13:16 »

просто сорт прокси модель она мало того что иногда глючит, так еще и жутко тормозит... В принципе ваш выбор понятен - прокси удобно подменять, но в данном случае есть одно действие - фильтр, задаваемый разными параметрами.
Как вариант еще можно отключать модели, настраивать а потом подключать, но всё равно при отключении/подключении будет та же проблема.
Записан
voronElf
Гость
« Ответ #5 : Январь 19, 2010, 07:06 »

Как доберусь до оптимизации этого места, попробую с blockSignals поэкспериментировать.

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

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

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Январь 19, 2010, 08:36 »

если совсем извращаться,то можно на каждый фильтр сделать класс-обертку и в проксе оперировать со списком таких классов. Та же цепочка, но прокся одна.
Записан
voronElf
Гость
« Ответ #7 : Январь 19, 2010, 11:59 »

Да, как вариант.
Только сама по себе эта цепочка появилась из-за реализации фильтра №5 (чтоб делать поиск в найденном) а тут прокатает QMap RegExp-ов, а остальные фильтры можно и кучей if -ов сделать в filterAcceptsRow (можт даже лучше получится, не тратить ресурсы на лишние вызовы функций и обход итераторов)
Записан
DS_tm
Гость
« Ответ #8 : Январь 19, 2010, 18:22 »

Да точно лучше получится, реализация несложная, делал проксю на произвольное количество фильтров по значению строки, работоло быстро.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.