Qt数据库 QSqlTableModel实例操作(1)(3)

时间:2022-07-18 10:58:31

第三,排序操作。

我们分别进入“按id升序排列”和“按id降序排列”按钮的单击事件槽函数,更改如下:

  
  
  
  1. void Widget::on_pushButton_5_clicked() //升序  
  2. {  
  3.     model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列  
  4.     model->select();  
  5. }  
  6. void Widget::on_pushButton_6_clicked() //降序  
  7. {  
  8.     model->setSort(0,Qt::DescendingOrder);  
  9.     model->select();  

我们这里使用了setSort()函数进行排序,它有两个参数,第一个参数表示按第几个属性排序,表头从左向右,最左边是第0个属性,这里就是id属性。第二个参数是排序方法,有升序和降序两种。

运行程序,效果如下:

Qt数据库 QSqlTableModel实例操作(1)(3)

这是按下“按id降序排列”按钮后的效果。

第四,删除操作。

我们进入“删除选中行”按钮单击事件槽函数,进行如下更改:

  
  
  
  1. void Widget::on_pushButton_4_clicked() //删除当前行  
  2. {  
  3.     int curRow = ui->tableView->currentIndex().row();  
  4.     //获取选中的行  
  5.     model->removeRow(curRow);  
  6.     //删除该行  
  7.     int ok = QMessageBox::warning(this,tr(“删除当前行!”),tr(“你确定”  
  8.                                                            “删除当前行吗?”),  
  9.                          QMessageBox::Yes,QMessageBox::No);  
  10.     if(ok == QMessageBox::No)  
  11.     {  
  12.        model->revertAll(); //如果不删除,则撤销  
  13.     }  
  14.     else model->submitAll(); //否则提交,在数据库中删除该行  

这里删除行的操作会先保存在model中,当我们执行了submitAll()函数后才会真正的在数据库中删除该行。这里我们使用了一个警告框来让用户选择是否真得要删除该行。

运行效果如下:

Qt数据库 QSqlTableModel实例操作(1)(3)

我们点击第二行,然后单击“删除选中行”按钮,出现了警告框。这时你会发现,表中的第二行前面出现了一个小感叹号,表明该行已经被修改了,但是还没有真正的在数据库中修改,这时的数据有个学名叫脏数据(Dirty Data)。当我们按钮“Yes”按钮后数据库中的数据就会被删除,如果按下“No”,那么更改就会取消。

第五,插入操作。

我们进入“添加记录”按钮的单击事件槽函数,更改如下:

  
  
  
  1. void Widget::on_pushButton_3_clicked() //插入记录  
  2. {  
  3.     int rowNum = model->rowCount(); //获得表的行数  
  4.    int id = 10;  
  5.     model->insertRow(rowNum); //添加一行  
  6.     model->setData(model->index(rowNum,0),id);  
  7.     //model->submitAll(); //可以直接提交  

我们在表的最后添加一行,因为在student表中我们设置了id号是主键,所以这里必须使用setData函数给新加的行添加id属性的值,不然添加行就不会成功。这里可以直接调用submitAll()函数进行提交,也可以利用“提交修改”按钮进行提交。

运行程序,效果如下:

Qt数据库 QSqlTableModel实例操作(1)(3)

按下“添加记录”按钮后,就添加了一行,不过在该行的前面有个星号,如果我们按下“提交修改”按钮,这个星号就会消失。当然,如果我们将上面代码里的提交函数的注释去掉,也就不会有这个星号了。

可以看到这个模型很强大,而且完全脱离了SQL语句,就算你不怎么懂数据库,也可以利用它进行大部分常用的操作。我们也看到了,这个模型提供了缓冲区,可以先将修改保存起来,当我们执行提交函数时,再去真正地修改数据库。当然,这个模型比前面的模型更高级,前面讲的所有操作,在这里都能执行。

本文章原创于www.yafeilinux.com

小结:Qt数据库 QSqlTableModel实例操作的内容介绍完了,希望本文读你有所帮助,耕读资料请参考编辑推荐。


转载注明地址:http://www.chengxuyuans.com/Symbian/16738.html