2013-02-15 14 views
5

मेरे पास QTableView से जुड़ी कई 1000 पंक्तियों का एक स्क्लाइट मॉडल है। मैं QTableView में पंक्तियां देख सकता हूं लेकिन जब मैं QTableView के नीचे स्क्रॉल करता हूं, तो मैं केवल पहले कुछ 100 पंक्तियों के अंत तक पहुंच सकता हूं। अगर मैं स्क्रॉलबार बटन पर खींचता रहता हूं, तो नई पंक्तियों को दृश्य में जोड़ दिया जाता है लेकिन मैं आसानी से अंत तक स्क्रॉल नहीं कर सकता। एक बार सभी पंक्तियों को देखने के लिए जोड़ा जाता है, तो मैं बिना किसी समस्या के शीर्ष से नीचे तक स्क्रॉल कर सकता हूं।QTableView में स्क्लाइट मॉडल की अंतिम पंक्ति तक कैसे स्क्रॉल करें?

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 भार डेटा lazily है, यानी यह आइटम जब यह करने के लिए कहा है लोड होगा। और QTableView आइटमों के लिए पूछेगा यदि उन्हें प्रदर्शित करने की आवश्यकता है। आप जिस देरी का निरीक्षण करते हैं वह वह हिस्सा है जो QSqlTableModel डेटाबेस से नया डेटा प्राप्त करता है।

वहाँ भी, an issue है अगर एसक्यूएल ड्राइवरों क्वेरी आकार रिपोर्ट नहीं करता, और SQLite उनमें से एक है:

डेटाबेस एक प्रश्न में चयनित पंक्तियों की संख्या वापस नहीं करता है, तो मॉडल पंक्तियों को क्रमशः लाएगा। अधिक जानकारी के लिए 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

संबंधित मुद्दे