QSqlQueryModel 使用query()中exec()不能立刻顯示在TabView原因以及解決方案

 在編寫Qt Sqlite編程的時候我們喜歡使用:

 qryModel->query().exec();

其中qryModel 是QSqlQueryModel* 的變量,且在初始化的時候,與tabView綁定在一起:

qryModel = new QSqlQueryModel(this);
qryModel->setQuery("SELECT empNo,name,Gender,Height,Birthday,Mobile,"
         "Province, City,Department,Education,Salary FROM employee order by empNo");
 ui->tableView->setModel(qryModel);

當我們在別的函數裏通過QSqlQuery 類進行數據庫操作後,喜歡使用:

qryModel->query().exec();//數據模型重新查詢數據,更新tableView顯示

        這句話相當於,執行最開始qryModel->setQuery()中的sql語句,但是tabview並沒有直接顯示出來數據,而是用鼠標點擊其他地方讓tabview相當於刷新一樣,數據才顯示出來。

當我們把語句改成:

qryModel->setQuery("SELECT empNo,name,Gender,Height,Birthday,Mobile,"
                  "Province, City,Department,Education,Salary FROM employee order by empNo");

tabView可以立刻顯示出來了。

這是爲啥呢?

我們知道:

ui->tableView->setModel(qryModel);

後,只要qryModel出現變化時候,tabview纔會發出相應的改變:

當我們執行:

 qryModel->query().exec();

      執行的是之前保留的數據,並沒有對其改變,tabview不能識別其改變,界面也就沒有出現變化,但是使用了setQuery相當於從新改變qryModel的數據,觸發了tabview,於是我們可以立刻看到數據。

竟然如此,我們如何處理呢,其實很簡單:

qryModel->layoutChanged();

在前面一句後面加上這句話,相當於發送一個信號,告訴tabview我改變了,於是界面上就是可以立刻顯示出數據啦。

總結方法:

方案1:

直接使用setQuery函數

qryModel->setQuery("SELECT empNo,name,Gender,Height,Birthday,Mobile,"
         "Province, City,Department,Education,Salary FROM employee order by empNo");

方案2:

qryModel->query().exec();
qryModel->layoutChanged();

是不是非常簡單呢,讓我一起學習與進步。喜歡可以關注我博客喲。

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