【发布时间】:2018-06-13 09:20:51
【问题描述】:
TL;DR
我想在不提高性能的情况下对单个表中的多个数据集进行分组 通过优化QSortFilterProxyModel 或迭代表数据模型。 (性能更好)
例如下面的主表:
+------+------+---------+
| Col1 | Col2 | Results |
+------+------+---------+
| a | b | 2 |
| a | c | 4 |
| v | b | 5 |
+------+------+---------+
可以通过指定一些分组条件输出多个聚合数据集 例如:
-
组和总和“a”条目的条件
Dataset results => a = 6 -
组和总和“ab”条目的条件
Dataset results => a = 2 -
组和总的条件
Col1Dataset results => a = 2 V = 1
每个结果数据集都将显示在适当的表格视图中。
我通过为每个组条件实现多个QSortFilerProxyModel 成功实现了这一点。 (我不得不继承QSortFilerProxyModel设置组条件并覆盖filterAcceptsRow函数。)
但是,问题在于性能、大型数据集和多个代理
Qt 代理模型将迭代 (filterAcceptsRow) 所有表模型 X 次,这会降低性能。
我想通过只迭代一次模型来创建多个数据集。
是否可以使用代理模型来实现?
或者也许我需要自己迭代主表模型并生成这些自定义模型?
注意:
在我看来,使用QSortFilerProxyModel 来实现它似乎是不可能的,因为模型索引,
如果我处理多个数据集,每个数据集都可以有不同的rowCount(),并且模型索引将被破坏。
【问题讨论】:
-
您实际上是对数据进行排序和过滤,即只显示满足您条件的行和列,还是显示您的条件结果?如果是第二个,我认为 QSortfilterProxyModel 不适合使用。
-
@plover,我想显示条件的结果,如果主表被过滤我想过滤条件结果。对于此任务,
QSortfilterProxyModel的替代方法是什么? -
所以条件的结果是静态的,除非数据发生变化或数据被过滤掉?对于仅在模型的“dataChanged”信号或应用新过滤器时重新计算的结果,我只会有一个不同的视图/小部件。