2013-02-15 14 views
5

Ho un modello Sqlite di diverse 1000 righe collegate a un QTableView. Posso visualizzare le righe in QTableView ma quando scorro fino alla fine di QTableView, posso solo arrivare alla fine delle prime 100 righe. Se continuo a tirare sul pulsante della barra di scorrimento, le nuove righe vengono aggiunte alla vista ma non riesco a scorrere facilmente fino alla fine. Dopo aver aggiunto tutte le righe alla vista, posso facilmente scorrere dall'alto verso il basso senza problemi.Come scorrere fino all'ultima riga di un modello Sqlite in una QTableView?

Ecco la parte importante del codice (che è solo standard):

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) 

Devo mancare qualcosa di molto semplice. Eventuali suggerimenti?

Laurence.

risposta

6

QSqlTableModel carica pigramente i dati, cioè carica gli articoli quando richiesto. E QTableView chiederà gli articoli se ha bisogno di visualizzare loro. Questo ritardo si osserva è la parte che QSqlTableModel recupera i nuovi dati dal database.

C'è anche an issue, se i driver SQL non riportano dimensione query, e SQLite è uno di loro:

Se il database non restituisce il numero di righe selezionate in una query, il il modello preleverà le righe in modo incrementale. Vedere fetchMore() per ulteriori informazioni .

Così il modello in realtà non sa quanti articoli ci saranno fino carica tutti gli elementi.

Al fine di eliminare il ritardo è necessario caricare tutti i dati in anticipo (come suggerisce 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

Perfetto! Proprio quello che dovevo fare. – Lozzer

Problemi correlati