Сортировка / фильтрация QList в QAbstractListModel

Я хочу отсортировать и отфильтровать QList с пользовательскими объектами (по его атрибутам), который является атрибутом в QAbstractListModel производный класс, но я не могу понять, разложение. Я думаю, что я должен использовать QSortFilterProxyModelпотому что, похоже, он делает именно то, что мне нужно, но я действительно не могу сказать.

В настоящее время я проецирую свою модель на QML (GridView).

Должен ли я сделать новый класс, производный от моей модели (класс, полученный из QAbstractListModel) или мне по другому? Я не могу понять, как работает фильтрация по нескольким значениям (объединение этих фильтров) и как я могу реализовать это в QSortFilterProxyModel, Я могу понять, что после фильтрации я могу просто отсортировать их по атрибутам объектов в QList.

Какое лучшее (или хотя бы хорошее) решение для фильтрации и сортировки в модели?

1 ответ

Вот простое приложение на основе QML, которое показывает базовое представление списка с текстовым элементом, в котором пользователь может выполнять фильтрацию элементов.

https://github.com/freakMeduza/Qt-QML-search-panel

Для сортировки вы можете добавить еще одну функцию Q_INVOKABLE в класс FilterProxyModel:

void FilterProxyModel::setSortOrder(bool checked)
{
 if(checked)
 {
 this->sort(0, Qt::DescendingOrder);
 }
 else
 {
 this->sort(0, Qt::AscendingOrder);
 }
}

После этого добавьте некоторые элементы управления в форму QML для проверки.

Другие вопросы по тегам