Создание подкласса QAbstractProxyModel, добавление узлов дерева, которые не существуют в исходной модели

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

Но при этом подклассы QAbstractProxyModel жизнеспособный вариант?
поскольку mapToSource(const QModelIndex& proxyIndex) не всегда будет возвращать действительный исходный индекс для действительного прокси-индекса.

Есть ли у кого-то лучшее решение, возможно, просто с помощью QAbstractItemModel без встроенной функции прокси?

1

Решение

Вот два примера проектов, которые решают эту проблему, для дальнейшего использования. (Один из них мой, я не имею в виду спам, это просто актуально.)

GroupedItemsProxyModel (доктор)
QGroupingProxyModel (доктор)

Изменить (ответ на комментарий)Оба проекта реализуют то, о чем, я полагаю, вопрос задается. Я думаю, что изучение источника дает лучшие примеры и, очевидно, будет слишком долго, чтобы вставить все это здесь. Я предоставил ссылки непосредственно на источник и соответствующую документацию.

1

Другие решения

ОБНОВЛЕНИЕ: Извините, понял это немного неправильно. Я никогда не наследовал абстрактную модель прокси, поэтому я не уверен в этом. Однако я бы начал использовать QSortFilterProxyModel. Может случиться так, что у него есть некоторые функции, которые вам не нужны, но это не повредит. С другой стороны, реализация вашей модели на прокси может повредить, так как требует дополнительной работы и ноу-хау.

Если у вас возникнут проблемы с переключением с несгруппированной структуры на сгруппированную структуру в прокси-модели, рассмотрите возможность переключения модели представления (одна показывает сгруппированные данные, другая — оригинальные несгруппированные данные).

0

По вопросам рекламы [email protected]