2013-02-15 30 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

相關問題