【发布时间】:2015-02-16 16:09:53
【问题描述】:
我目前正在开发一个使用自定义模型作为 Qt 模型/视图结构扩展的应用程序。一个名为 MyModel 的模型存储了一个具有几千个元素的对象(比如 std::vector ),MyModel 中的数据使用标准的 QTableView 进行查看。但是,该应用程序支持对表格中查看的数据进行一些简单的基本过滤,包括按相关性、上传日期等进行过滤。
QSortFilterProxyModel 允许基于正则表达式对模型数据进行(排序和)过滤,但不幸的是,在 bool filterAcceptsRow( int const &, QModelIndex const & ) 中定义的过滤技术不允许传递自定义函子,这样functor 用作过滤函数,而不是在 filterAcceptsRow 中进行过滤。
这就是我要说的,假设一个人想在已经生成的乘法表( 12 x 12 )中找出所有偶数,目前我认为可以通过 QSortFilterProxyModel::filterAcceptsRow( ... ) 来实现
QSortFilterProxyModel::filterAcceptsRow( int source_row, ... )
{
return sourceModel()->data( source_row ).toInt() % 2 == 0;
}
我想要的不仅仅是按偶数过滤,有没有一种方法可以通过将不同的函子传递给 filterAcceptsRow(...) 来进行各种过滤?像 std::sort( , , lambda_expression ) 或 std::for_each( , , lambda ) 等,因此按相关性、日期、时间过滤将调用相同的函数,但具有不同的函子。
编辑:我很抱歉格式很糟糕,我的手机可以做的很少
【问题讨论】:
-
这是一个基于策略的类的精简实现。也许这样的东西是你正在寻找的? ideone.com/hsNTXn
-
这可行,但我希望看到更多可能的方式来实现相同的目标,感谢 PaulMcKenzie