2013-02-15 7 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がデータベースから新しいデータをフェッチする部分です。

データベースクエリで選択された行数を返さない場合は、 :SQLドライバはクエリのサイズを報告しません、とSQLiteのはそのうちの一つである場合

は、またan issueありモデルは行を徐々にフェッチします。詳しくは の情報については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

関連する問題