c++ - 在 QAbstractListModel 中排序/过滤 QList
问题描述
我想QList
用自定义对象(通过它的属性)进行排序和过滤,这是QAbstractListModel
派生类中的一个属性,但我无法弄清楚分解。我想我应该使用QSortFilterProxyModel
,因为它看起来完全符合我的需要,但我真的不知道。
我目前正在将我的模型投影到 QML ( GridView
)。
我应该创建由我的模型派生的新类(派生自 的类QAbstractListModel
),还是应该以其他方式创建?我无法弄清楚按多个值(这些过滤器的串联)过滤是如何工作的,以及如何在QSortFilterProxyModel
. 我可以弄清楚,过滤后我可以简单地按 QList 中对象的属性对它们进行排序。
在模型中过滤和排序的最佳(或至少是好的)解决方案是什么?
解决方案
这是一个简单的基于 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 表单添加一些控件以进行检查。
推荐阅读
- websocket - Websocket:如何只接收来自连接的最新消息?
- nginx - Kubernetes nginx 入口在集群内部工作,但在外部不可见
- azure - 一个阶段的输出不可用于后续阶段
- swift - 设备移动时 SCNNode 在 ARSCNView 中移动
- html - HTML table Uncaught ReferenceError: $ is not defined
- flutter - 应用程序检查用户是否登录时颤动启动屏幕
- azure-data-factory - 如果不存在数据,则 ADLS 数据复制任务失败
- javascript - 使用 html 中的 javascript 计算加密货币汇率。我有一个不起作用的 JavaScript 代码。有人可以帮助我吗?
- r - R Data.Table 将值复制到另一行
- visual-studio-code - VSCode Vim 插件折叠 ctrl+k ctrl+