在編寫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();
是不是非常簡單呢,讓我一起學習與進步。喜歡可以關注我博客喲。