Как должны правильно взаимодействовать модель и QSortFilterProxyModel?
Приветствую!
Ситуация следующая:
Есть моделька, основанная на QAbstractItemModel, так как данных достаточно много, получаю их с помощью предназначенного для этого canFetchMore и fetchMode
и когда просто модель отображается в ListView (qml), всё замечательно, данные подгружаются по мере пролистывания.
Теперь на эту модельку сверху вешаю прокси, на основе QSortFilterProxyModel
в ней для теста отбираю строки (переопределив filterAcceptsRow) по какому нибудь полю, не важно.
Дальше начинаются проблемы.
При установленной фильтрации во вьюшке выводятся не все возможные значения!
т.е. выводятся только загруженные в fetchMore в данный момент.
Т.е. в fetchMore гружу по 100 записей, не выводятся ни одной, т.к. целевые значения будут прогружены начиная с 500.
и прогрузки дальше не происходит т.к. логично, что вьюшка не считает необходимым загружать ещё т.к. всё умещается и не надо пролистывать но и прокси моделька не считает нужным прогрузить дальше, либо как-то сообщить основной модели - мне нужны записи с вот такими значениями.
Подскажите, пожалуйста, как быть?
Не, я согласен, что лучше всего будет выбирать нужные значение через запрос к базе, что бы не грузить лишнего,
но как тогда лучше сделать связь с основной моделью?
т.е. например я в fetchRow основной модели прогрузил записи от 0 до 100, в прокси модели нужно выбирать, которые располагаются начиная с 500, ок, я говорю основной модели - прогрузи ка записи с вот такими значенияи, если есть.
Ок, гружу.
Но возникает следующая проблема - если запись например 555 добавлена в модель, то при скролинге вьюшки, она попросит записи с 500 по 600 и я тогда снова добавлю запись 555. т.е. получается будет дублирование. Запоминать записи, которые грузил? что-то костылём попахивает.
Может есть красивый выход из ситуации?
Какой смысл тогда от SFPM если я её буду подменять? Подменить уж проще сразу у вьюшки, чтобы SFPM заново по всем записям не бегала и не фильтровала. В любом случае спасибо за желание помочь. Я впринципе сделал для своих потребностей универсальную модельку, которая и с SFPM работать будет адекватно и прочее. Благо есть сигналы и слоты, но костылями попахивает это. Надеюсь, в Qt как-нибудь допилят этот момент взаимодействия.