首页 > 解决方案 > 在 QAbstractListModel 中排序/过滤 QList

问题描述

我想QList用自定义对象(通过它的属性)进行排序和过滤,这是QAbstractListModel派生类中的一个属性,但我无法弄清楚分解。我想我应该使用QSortFilterProxyModel,因为它看起来完全符合我的需要,但我真的不知道。

我目前正在将我的模型投影到 QML ( GridView)。

我应该创建由我的模型派生的新类(派生自 的类QAbstractListModel),还是应该以其他方式创建?我无法弄清楚按多个值(这些过滤器的串联)过滤是如何工作的,以及如何在QSortFilterProxyModel. 我可以弄清楚,过滤后我可以简单地按 QList 中对象的属性对它们进行排序。

在模型中过滤和排序的最佳(或至少是好的)解决方案是什么?

标签: c++qtqmlqt5qabstractlistmodel

解决方案


这是一个简单的基于 QML 的应用程序,它显示了一个带有文本项目的基本列表视图,用户可以在该列表视图上执行项目过滤。

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

对于排序,您可以在类 FilterProxyModel 中再添加一个 Q_INVOKABLE 函数:

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

之后向 QML 表单添加一些控件以进行检查。


推荐阅读