Qt 數據庫模型(QSqlQueryModel,QSqlTableModel)獲取模型中的所有數據

數據模型默認不是顯示所有數據

最近使用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()接口之後調用。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章