2013-02-15 135 views
5

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

下面的代码的重要组成部分(这仅仅是标准):

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) 

我必须失去了一些东西很简单。有什么建议么?

劳伦斯。

回答

6

QSqlTableModel懒惰地载入数据,即它将在请求时加载项目。而且QTableView会要求物品如果需要显示他们。您观察到的延迟是QSqlTableModel从数据库中提取新数据的部分。

还有an issue,如果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) 
+0

完美!正是我需要做的。 – Lozzer 2013-02-15 06:48:55

相关问题