2013-02-15 41 views
5

Tôi có một mô hình Sqlite của một số 1000 hàng gắn liền với một QTableView. Tôi có thể xem các hàng trong QTableView nhưng khi tôi cuộn xuống dưới cùng của QTableView, tôi chỉ có thể đến cuối 100 hàng đầu tiên. Nếu tôi tiếp tục kéo vào nút thanh cuộn, các hàng mới sẽ được thêm vào chế độ xem nhưng tôi không thể dễ dàng cuộn đến cuối. Khi tất cả các hàng được nối vào chế độ xem, tôi có thể dễ dàng cuộn từ trên xuống dưới mà không gặp sự cố.Làm thế nào để di chuyển đến hàng cuối cùng của một mô hình Sqlite trong một QTableView?

Dưới đây là một phần quan trọng của mã (mà chỉ là tiêu chuẩn):

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) 

tôi phải mất một cái gì đó rất đơn giản. Bất kỳ đề xuất?

Laurence.

Trả lời

6

QSqlTableModel tải dữ liệu một cách uể oải, tức là nó sẽ tải các mục khi được yêu cầu. Và QTableView sẽ yêu cầu các mục nếu cần hiển thị chúng. Sự chậm trễ mà bạn quan sát là một phần mà QSqlTableModel tìm nạp dữ liệu mới từ cơ sở dữ liệu.

Ngoài ra còn có an issue, nếu trình điều khiển SQL không báo cáo kích thước Query, và SQLite là một trong số họ:

Nếu cơ sở dữ liệu không trả lại số hàng được lựa chọn trong một truy vấn, sự mô hình sẽ tìm nạp các hàng tăng dần. Xem hàm fetchMore() để biết thêm thông tin .

Vì vậy, mô hình thực sự không biết có bao nhiêu mục sẽ có cho đến nó sẽ tải tất cả các mục.

Nhằm loại bỏ sự chậm trễ bạn nên tải toàn bộ dữ liệu trước đó (như fetchMore gợi ý):

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

Perfect! Chỉ là những gì tôi cần làm. – Lozzer