假设我有一个列表变量datalist
存储10000个字符串实体。
QTableView
只需要显示其中一些实体。这就是为什么QTableView
被分配了QSortFilterProxyModel
来完成所有的过滤。
所有代理工作完成后,QTableView
“接收”25个实体进行显示(因此剩余的9975个实体被“过滤掉”。在
现在,我创建一个QLineEdit
作为搜索字段,用户可以在其中键入关键字进一步缩小显示的25个实体(项)的列表。为此,我将QLineEdit
的textChanged
信号链接到分配给QTableView代理的filterAcceptsRow()
方法。在
我在这里看到的问题是,代理模型需要回到原来的10000个实体长列表中重新过滤。再说一遍。再说一遍。在
我想知道是否有可能创建第二个代理来获取第一个代理已经过滤掉的内容:25个实体而不是10000个实体。在
因此,生成的模式如下所示:
datalist
>;QAbstractTableModel
>;QSortFilterProxyModel
>;QSortFilterProxyModel
>;QTableView
其中:
datalist
是10000个实体的长列表变量。在
QAbstractTableModel
是一个基本数据模型
QSortFilterProxyModel
是第一个执行最脏和最慢过滤工作的代理模型
QSortFilterProxyModel
是第二个代理模型,它对第一个代理数据进行预过滤(它用于根据用户的关键字进行过滤)。在
QTableView
是用于显示实体项的QTableView本身。在
所以,问题是:这是一个有效的想法吗?在
下面的代码使用两个代理模型过滤10000个项目。它起作用了。。。
这里有一个单一代理方法。与两个代理实现相比,按关键字搜索的速度明显较慢:
^{pr2}$相关问题 更多 >
编程相关推荐