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

관련 문제