數據模型默認不是顯示所有數據
最近使用QTableView結合QSqlQueryModel以及QSqlTableModel在寫很多報表,中間產生了一系列出乎意料的現象。其中之一就是QSqlQueryModel,QSqlTableModel這兩個數據庫模型默認加載數據的時候不是加載所有的數據,而是隻加載256條數據(前提是數據源有大於256的數據,如果沒有的則有多少條就加載多少條數據)。
下圖就是默認往數據模型塞數據後的顯示截圖:
數據模型出於效率考慮不會一下子加載模型中的所有數據,而是隻加載了256條數據,當滾動QTableView的滾動條的時候纔去繼續加載一些數據供用戶查看更多的模型數據。
獲取數據模型所有數據的方法
很多情況下,我們希望數據模型不採用默認的數據加載方式,而是一下子就把模型中的所有數據給加載出來。爲了滿足這種需求樓主各種百度谷歌加上查看Qt幫助文檔終於也自己實現了。
先上圖看下效果:
實現方法其實很簡單,就是結合使用模型的canFetchMore() 和 fetchMore()接口。
示例源碼:
QString sql = "select * from ut_s_orders";
m_mySqlQueryModel = new MySqlQueryModel();
initializeModel(m_mySqlQueryModel,&g_db,sql);
while (m_mySqlQueryModel->canFetchMore())
m_mySqlQueryModel->fetchMore();
ui->tableView->setModel(m_mySqlQueryModel);
canFetchMore()接口返回值是一個bool值,如果數據模型還有數據可以獲取則返回true,否則返回false。fetchMore()接口則把可以獲取的數據一條條加載進模型中。對於QSqlQueryModel模型要在模型的setQuery()接口之後調用(樓主上面的代碼setQuery()封裝在initializeModel()中);對於QSqlTableModel模型,要在模型的select()接口之後調用。