代理和fetchMore()/ canFetchMore()之后的Qt模型

ysh*_*rik 5 c++ proxy qt model view

我想知道在具有增量数据读取的主数据模型位于代理或代理链之后的情况下,视图的行为方式。

取消分组代理(例如:http : //lynxline.com/jongling-qt-models/)之类的项目重排的代理应如何实现对fetchMore()/ canFetchMore()的支持?

Pav*_*hov 6

通过检查QSortFilterProxyModel的来源,我可以得出以下结论:

  • QSortFilterProxyModel允许访问已获取的行。调用rowCountdata等等的行为就像源表中没有更多数据。
  • QSortFilterProxyModelQAbstractProxyModel默认情况下)路由canFetchMorefetchMore调用源模型的相应方法。

这意味着当您向下滚动具有QSortFilterProxyModel从动态获取的表中填充的视图时,该视图将被源模型中的新数据动态填充。但是,您不能确保将新项目添加到末尾。而是,向下滚动表时,其数据可以完全更改。可以根据当前的排序和过滤设置在任何位置添加新行。

如果不提供canFetchMore和的其他支持,fetchMoreUngroupProxyModel默认情况下,所有代理模型(包括链接的类)的行为都将类似于此。

QTableView表现出越野车显示此类模型。例如,如果源模型有行-2; -3; 2; 3;在我的答案中为行分隔符),则未排序的视图通常显示-2; -3; 2; 3; empty row; empty row。空行显示在表格底部。当用户向下滚动到足够靠近这些项目时,视图将请求获取更多数据。但是,启用排序后,该视图将显示-3; -2; empty row; empty row; 2; 3,即,它将空的无效行移动到表的中间或顶部。它不影响功能,但看起来很尴尬。

但是,所有上述问题均取决于实现。有关更多详细信息,请参考所用模型类的代码和文档。我认为可以实现随心所欲的代理模型。

同样,在某些情况下,在表中显示排序的数据之前完全获取源模型是合理的。在未获取所有数据的情况下,无法进行正确的排序或合并。如果您获取了源模型数据(例如while(model->canFetchMore()) { model->fetchMore(); }),则代理模型的行为将完全像未动态填充模型一样。