Qt 多重QSortFilterProxy模型性能优化
TL;DR 我希望在不提高性能的情况下,将单个表中的多个数据集分组 通过优化或迭代表数据模型。(哪个性能更好)Qt 多重QSortFilterProxy模型性能优化,qt,qsortfilterproxymodel,Qt,Qsortfilterproxymodel,TL;DR 我希望在不提高性能的情况下,将单个表中的多个数据集分组 通过优化或迭代表数据模型。(哪个性能更好) 例如,以下主表: +------+------+---------+ | Col1 | Col2 | Results | +------+------+---------+ | a | b | 2 | | a | c | 4 | | v | b | 5 | +------+------+---------+ 通
例如,以下主表:
+------+------+---------+
| Col1 | Col2 | Results |
+------+------+---------+
| a | b | 2 |
| a | c | 4 |
| v | b | 5 |
+------+------+---------+
通过指定一些分组条件,可以输出多个聚合数据集
例如:
- 组和总和“a”分录的条件
- 组和总和“ab”项的条件
- 组和和和的条件
Col1
Dataset results => a = 2 V = 1
filterAcceptsRow
)所有表模型X次,从而降低性能
我想通过只迭代一次模型来创建多个数据集
是否可以使用代理模型来实现它
或者我需要自己迭代主表模型并生成这些自定义模型
注意:
在我看来,似乎不可能通过使用QSortFilerProxyModel
实现它,因为模型索引,
如果我创建了多个数据集,每个数据集可以有不同的
rowCount()
,模型索引将被破坏。首先,创建自定义代理所需的一切都是qabstractemmodel
。您根本不需要从筛选代理类派生。如何实现这样一个模型取决于您自己,但不要局限于认为代理实际上不需要是抽象模型的实现。代理类是为了方便您:当使用它们不方便时,请不要
此外,可行的方法有点不同,这取决于您的输出算术类型。如果每个过滤器只生成一行结果,那么让一个代理生成所有结果就可以了——但您是在自己的表视图中查看每一行结果吗?也许您的UI需要这样做。如果分组可以生成多行数据(例如,Col1上的group
,输出总和(结果)
),则需要对每个结果集进行单独查看
然后我将创建一个与数据源接口的公共代理,但该代理不直接使用。事实上,这个代理只是一个
QObject
,根本不是从qabstractemmodel
派生出来的。相反,它将创建qabstractemmodel
实例,作为数据视图。他们会将请求转发给公共代理,该代理在任何情况下都具有满足请求所需的所有数据。您是在对数据进行排序和筛选,即仅显示满足条件的行和列,还是在显示条件的结果?如果是第二个,我认为QSortfilterProxyModel不适合使用。@plover,我想显示条件的结果,如果主表已筛选,我想筛选条件结果。对于此任务,QSortfilterProxyModel
的替代方案是什么?因此,条件的结果是静态的,除非数据更改或数据被过滤掉?对于结果,我只会有一个不同的视图/小部件,它只会在模型的“dataChanged”信号或应用新过滤器时重新计算。感谢您的回答,我将尝试实现通用代理方法。
Dataset results => a = 2
Dataset results => a = 2
V = 1