5

我有一个连接到 QTableView 的 1000 行的 Sqlite 模型。我可以查看 QTableView 中的行,但是当我滚动到 QTableView 的底部时,我只能到达前 100 行的末尾。如果我继续拉动滚动条按钮,新行会附加到视图中,但我无法轻松滚动到最后。一旦所有行都附加到视图中,我就可以轻松地从上到下滚动而不会出现问题。

这是代码的重要部分(这只是标准):

self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName(dbFileName)

self.model = QtSql.QSqlTableModel(self.db)
self.model.setTable("results")
self.model.select()
self.tableViewResults.setModel(self.model)

我一定错过了一些非常简单的东西。有什么建议么?

劳伦斯。

4

1 回答 1

6

QSqlTableModel延迟加载数据,即它会在请求时加载项目。如果QTableView需要显示它们,它会询问项目。您观察到的延迟是QSqlTableModel从数据库中获取新数据的部分。

还有一个问题,如果 SQL 驱动程序不报告查询大小,而 SQLite 就是其中之一:

如果数据库未返回查询中选定行的数量,则模型将增量获取行。有关详细信息,请参阅 fetchMore()。

所以模型实际上在加载所有项目之前并不知道会有多少项目。

为了消除延迟,您应该预先加载所有数据(如fetchMore建议的那样):

self.db = QtSql.QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName(dbFileName)

self.model = QtSql.QSqlTableModel(self.db)
self.model.setTable("results")
self.model.select()
while self.model.canFetchMore():
    self.model.fetchMore()
self.tableViewResults.setModel(self.model)
于 2013-02-15T05:14:31.183 回答