Я пытаюсь реализовать ProxyModel, который принимает исходную модель, которая представляет собой плоскую, табличную структуру.
Затем вы можете выбрать один столбец этой модели в качестве значения группировки.
Затем прокси-модель должна создать столько верхних узлов, сколько существует различных значений этого столбца, и отсортировать в них нижележащие строки.
Но при этом подклассы QAbstractProxyModel
жизнеспособный вариант?
поскольку mapToSource(const QModelIndex& proxyIndex)
не всегда будет возвращать действительный исходный индекс для действительного прокси-индекса.
Есть ли у кого-то лучшее решение, возможно, просто с помощью QAbstractItemModel
без встроенной функции прокси?
Вот два примера проектов, которые решают эту проблему, для дальнейшего использования. (Один из них мой, я не имею в виду спам, это просто актуально.)
GroupedItemsProxyModel (доктор)
QGroupingProxyModel (доктор)
Изменить (ответ на комментарий)Оба проекта реализуют то, о чем, я полагаю, вопрос задается. Я думаю, что изучение источника дает лучшие примеры и, очевидно, будет слишком долго, чтобы вставить все это здесь. Я предоставил ссылки непосредственно на источник и соответствующую документацию.
ОБНОВЛЕНИЕ: Извините, понял это немного неправильно. Я никогда не наследовал абстрактную модель прокси, поэтому я не уверен в этом. Однако я бы начал использовать QSortFilterProxyModel. Может случиться так, что у него есть некоторые функции, которые вам не нужны, но это не повредит. С другой стороны, реализация вашей модели на прокси может повредить, так как требует дополнительной работы и ноу-хау.
Если у вас возникнут проблемы с переключением с несгруппированной структуры на сгруппированную структуру в прокси-модели, рассмотрите возможность переключения модели представления (одна показывает сгруппированные данные, другая — оригинальные несгруппированные данные).