QTreeView - сортировка и фильтрация модели - PullRequest
5 голосов
/ 30 июня 2009

Я пытаюсь создать QTreeView, который отображает некоторую отсортированную информацию. Для этого я использую QSortFilterProxyModel между представлением и моей моделью.

Проблема в том, что я хочу ограничить количество строк первыми n строками (после сортировки). Функция фильтра из модели получает исходный sourceRow, поэтому я не могу его использовать.

Я попытался объединить два объекта QSortFilterProxyModel: первый для сортировки и второй для фильтрации. Но похоже, что вторая прокси-модель (фильтрация) не получает отсортированные строки ....

Есть ли другой способ сделать это? Кто-нибудь использовал эту технику (цепочка из двух моделей прокси), и она работает?

спасибо

EDIT: Я пытался с rowCount, и он не работает. Я также пытался связать две модели прокси, но проблема в том, что представление вызывает функцию сортировки для получаемой модели. Таким образом, если первый прокси-сервер сортирует, а второй фильтр сортирует вызов на модели фильтра, и данные не будут отсортированы.

EDIT2: я изучил исходный код qt, и фильтрация выполняется перед сортировкой, поэтому в filterAcceptsRow () я не знаю ни одного порядка сортировки.

Ответы [ 2 ]

0 голосов
/ 02 июля 2009

После того, как я попробовал несколько слишком сложных способов решить эту проблему, я сделал небольшой хак для моей проблемы: после того, как я вставил / удалил строку, я вызываю setRowHidden, чтобы скрыть первые n строк. Это не самое элегантное решение, и оно подходит для моих нужд, но я не могу найти лучшую альтернативу.

Я хотел бы упомянуть, что на gtk, поскольку модели фильтра и прокси-сервера сортировки разделены, это можно сделать довольно легко.

Я все еще надеюсь, что кто-то может предложить лучшее решение для этого.

0 голосов
/ 30 июня 2009

Просто из любопытства, вы пытались переопределить метод rowCount и просто возвращали 25 (или что бы то ни было n в вашем случае)? Это может быть так просто ... ну, если у вас всегда будет хотя бы n предметов.

В противном случае вы можете попробовать связать модели в цепочку. Я не знаю, почему это не сработает, но я никогда сам не пробовал что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...