加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在QTableView中滚动到Sqlite模型的最后一行?

发布时间:2020-12-12 18:57:27 所属栏目:百科 来源:网络整理
导读:我有一个连接到QTableView的几千行的Sqlite模型.我可以在QTableView中查看行,但是当我滚动到QTableView的底部时,我只能到达前几百行的末尾.如果我继续拉动滚动条按钮,新行会附加到视图中,但我无法轻松滚动到结尾.将所有行附加到视图后,我可以轻松地从上到下
我有一个连接到QTableView的几千行的Sqlite模型.我可以在QTableView中查看行,但是当我滚动到QTableView的底部时,我只能到达前几百行的末尾.如果我继续拉动滚动条按钮,新行会附加到视图中,但我无法轻松滚动到结尾.将所有行附加到视图后,我可以轻松地从上到下滚动而不会出现问题.

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

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)

我必须错过一些非常简单的事情.有什么建议?

劳伦斯.

解决方法

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

还有an issue,如果SQL驱动程序没有报告查询大小,SQLite就是其中之一:

If the database doesn’t return the number of selected rows in a query,
the model will fetch rows incrementally. See fetchMore() for more
information.

因此,在加载所有项目之前,模型实际上不知道将有多少项目.

为了消除延迟,您应该事先加载所有数据(如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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读