相关疑难解决方法(0)

链式QSortFilterProxyModels

假设我有一个datalist存储10,000个字符串实体的列表变量.的QTableView需求,只显示一些实体.这就是QTableView分配QSortFilterProxyModel完成所有过滤的原因.完成所有代理工作后,QTableView"接收"25个实体进行显示(因此剩余的9,975个实体被"过滤掉".

现在,我创建一个QLineEdit用作搜索字段的用户可以键入关键字以进一步缩小显示的25个实体(项目)的列表.为此我链接QLineEdittextChanged信号分配给QTableView中代理的filterAcceptsRow()方法.

我在这里看到的问题是代理模型需要回到原来的10,000个实体长列表再次重新过滤.然后再次.然后再次.

我想知道是否有可能创建第二个代理,它将拾取第一个代理已经过滤掉的内容:25个实体而不是10,000个实体.

所以生成的模式如下所示:

datalist> QAbstractTableModel> QSortFilterProxyModel> QSortFilterProxyModel>QTableView

哪里:

datalist 是10,000个实体长列表变量.

QAbstractTableModel 是一个基础数据模型

QSortFilterProxyModel 是第一个执行最脏和最慢过滤作业的代理模型

QSortFilterProxyModel 是第二个代理模型,用于对第一个代理数据进行预过滤(用于按用户的关键字进行过滤).

QTableView 是一个QTableView本身用于显示实体项目.

所以,问题是:这是一个有效的想法吗?

python qt pyqt pyside qsortfilterproxymodel

6
推荐指数
1
解决办法
430
查看次数

处理接近大型数据集时加快 QSortFilterProxyModel 过滤速度

之前,我询问a question过多列过滤,我们需要表示适合多个过滤模式的行。

现在,在处理大表(big我的意思是大约 200,000 行和 4 列)时,如果我们有一个那么大的表,过滤就会变慢(通常这对于过滤模式的前 2 个字符来说是最糟糕的)。

那么您对此有何建议?

注意:我有自己的高性能源数据模型(而不是QStandardItemModel),基于this示例,该模型在大约 1 秒内提供我对该行数的视图

编辑1

改变我的方法:

bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {
if (/* filtering is enable*/) {
    bool _res = sourceModel()->data(sourceModel()->index(source_row, 0, source_parent)).toString().contains( /*RegExp for column 0*/);
    for (int col = 0; col < columnCount(); col++) {
        _res &= sourceModel()->data(sourceModel()->index(source_row, col + 1, source_parent)).toString().contains(/*RegExp for column col + 1*/);
    }
    return _res;
}
return true;
Run Code Online (Sandbox Code Playgroud)

}

对此:

bool DataFilter::filterAcceptsRow(int source_row, …
Run Code Online (Sandbox Code Playgroud)

c++ qt qabstractitemmodel qt5 qsortfilterproxymodel

5
推荐指数
1
解决办法
5088
查看次数