我在QTableView
之上有一个QSqlTableModel
。我的数据库是sqlite。
我知道QSqlTableModel
懒惰地从数据库加载数据(它实际上一次加载256行),所以当用户将视图滚动到底部时,模型会加载256行。
我想知道:
答案 0 :(得分:0)
视图通过为所有可见的表格单元调用data
函数来询问模型的数据。然后,模型在需要时查询数据库。具体如何发生取决于底层数据库。 QSqlQueryModel
文档说:“如果数据库没有返回查询中所选行的数量,模型将逐步获取行。有关更多信息,请参阅fetchMore()”。显然这是sqlite的情况。
查询发生在模型的fetchMore
方法中,我认为没有涉及任何信号。您应该能够使用canFetchMore
方法来测试是否已检索到所有记录(不确定是否有您想要的,也许您可以告诉我们您最终想要实现的目标。)
讨论后编辑:
您可以从模型继承并覆盖数据方法。我不知道它在视图中的位置,可能在许多地方。您可以尝试查看Qt源代码。如果您需要从视图中执行此操作:当我查看QAbstractScrollArea(它是QTableView的祖先)的文档时,您似乎可以连接到滚动条的QAbstractSlider.actionTriggered信号以检测滚动条是否处于最大值。