在QAbstractListModel中对QList进行排序/过滤

时间:2018-07-05 17:21:25

标签: c++ qt qml qt5 qabstractlistmodel

我想使用自定义对象(通过其属性)对QList进行排序和过滤,该对象是QAbstractListModel派生类中的一个属性,但是我无法弄清楚分解。我认为我应该使用QSortFilterProxyModel,因为它看起来确实可以满足我的需求,但是我实在无法分辨。

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

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

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

1 个答案:

答案 0 :(得分:0)

这是一个基于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表单中添加一些控件以进行检查。