widgets how functions sqlite pyqt qtableview

how - ¿Cómo desplazarse a la última fila de un modelo Sqlite en QTableView?



pyqt widgets (1)

Tengo un modelo Sqlite de varias 1000 filas unidas a QTableView. Puedo ver las filas en QTableView, pero cuando me desplazo a la parte inferior de QTableView, solo puedo llegar al final de las primeras 100 filas. Si sigo tirando del botón de la barra de desplazamiento, se anexan nuevas filas a la vista, pero no puedo desplazarme fácilmente hasta el final. Una vez que todas las filas se anexan a la vista, puedo desplazarme fácilmente de arriba a abajo sin problemas.

Aquí está la parte importante del código (que es solo estándar):

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)

Debo extrañar algo muy simple. ¿Alguna sugerencia?

Laurence.


QSqlTableModel carga datos de forma perezosa, es decir, cargará los elementos cuando se QSqlTableModel . Y QTableView le pedirá artículos si necesita mostrarlos . La demora que observa es la parte en la que QSqlTableModel obtiene nuevos datos de la base de datos.

También hay un problema , si los controladores SQL no informan el tamaño de la consulta, y SQLite es uno de ellos:

Si la base de datos no devuelve el número de filas seleccionadas en una consulta, el modelo obtendrá filas de forma incremental. Vea fetchMore () para más información.

Entonces, el modelo en realidad no sabe cuántos elementos habrá hasta que cargue todos los artículos.

Para eliminar el retraso, debe cargar todos los datos de antemano (como fetchMore sugiere 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)