当Qtableview滚动时,会调用什么模型的插槽

时间:2015-12-18 14:27:50

标签: python qt pyqt

我在QTableView之上有一个QSqlTableModel。我的数据库是sqlite。

我知道QSqlTableModel懒惰地从数据库加载数据(它实际上一次加载256行),所以当用户将视图滚动到底部时,模型会加载256行。

我想知道:

  • 当用户到达视图底部时发出的信号是什么?
  • 调用加载下256行的模型的方法是什么?

1 个答案:

答案 0 :(得分:0)

视图通过为所有可见的表格单元调用data函数来询问模型的数据。然后,模型在需要时查询数据库。具体如何发生取决于底层数据库。 QSqlQueryModel文档说:“如果数据库没有返回查询中所选行的数量,模型将逐步获取行。有关更多信息,请参阅fetchMore()”。显然这是sqlite的情况。

查询发生在模型的fetchMore方法中,我认为没有涉及任何信号。您应该能够使用canFetchMore方法来测试是否已检索到所有记录(不确定是否有您想要的,也许您可​​以告诉我们您最终想要实现的目标。)

讨论后编辑:

您可以从模型继承并覆盖数据方法。我不知道它在视图中的位置,可能在许多地方。您可以尝试查看Qt源代码。如果您需要从视图中执行此操作:当我查看QAbstractScrollArea(它是QTableView的祖先)的文档时,您似乎可以连接到滚动条的QAbstractSlider.actionTriggered信号以检测滚动条是否处于最大值。