• 记忆力减退之QTableMode与数据库关联


    1. QSqlDatabase db;
    2. QSqlTableModel *model;
    3. void Widget::Init(){
    4. //判断数据库是否存在,如果存在直接打开,如果不存在则在打开时直接新建,需要手动新增表
    5. QString dbName = "myDatabase.db";
    6. QFileInfo info(dbName);
    7. bool isexists = info.exists();
    8. db = QSqlDatabase::addDatabase("QSQLITE");
    9. db.setDatabaseName(dbName);
    10. bool ok = db.open();//如果存在直接打开,如果不存在则在打开时直接新建
    11. if(ok){
    12. //创建表
    13. if(!isexists){
    14. QString sql = "create table student(studentID int, name text, "
    15. "class text, chinese float, math float, "
    16. "english float, physics float, sports float, total float);";
    17. QSqlQuery query(db);
    18. bool ret = query.exec(sql);
    19. if(!ret){
    20. QMessageBox::warning(this,"警告","创建数据库失败!",QMessageBox::Yes);
    21. return;
    22. }
    23. }
    24. }
    25. //数据库与table view相关联
    26. model = new QSqlTableModel(this, db);
    27. model->setTable("student");//表关联
    28. //修改表头别名
    29. model->setHeaderData(0, Qt::Horizontal, QVariant("学号"));
    30. model->setHeaderData(1, Qt::Horizontal, QVariant("姓名"));
    31. model->setHeaderData(2, Qt::Horizontal, QVariant("班级"));
    32. model->setHeaderData(3, Qt::Horizontal, QVariant("语文"));
    33. model->setHeaderData(4, Qt::Horizontal, QVariant("数学"));
    34. model->setHeaderData(5, Qt::Horizontal, QVariant("英语"));
    35. model->setHeaderData(6, Qt::Horizontal, QVariant("物理"));
    36. model->setHeaderData(7, Qt::Horizontal, QVariant("体育"));
    37. model->setHeaderData(8, Qt::Horizontal, QVariant("合计"));
    38. model->select();
    39. ui->tableViewShow->setModel(model);
    40. }
    41. void Widget::on_btnOK_clicked()
    42. {
    43. model->submitAll();//确认提交
    44. model->select();
    45. }
    46. void Widget::on_btnAdd_clicked()
    47. {
    48. model->insertRow(model->rowCount());//新增一行
    49. model->select();
    50. }
    51. void Widget::on_btnCancel_clicked()
    52. {
    53. model->revertAll();//取消还原
    54. model->select();
    55. }
    56. void Widget::on_btnSelect_clicked()
    57. {
    58. model->select();//刷新view显示
    59. }
    60. void Widget::on_btnAscending_clicked()
    61. {
    62. QModelIndex index= ui->tableViewShow->currentIndex();
    63. model->sort(index.column(), Qt::AscendingOrder);//升序
    64. ui->tableViewShow->setCurrentIndex(index);
    65. }
    66. void Widget::on_btnDescending_clicked()
    67. {
    68. QModelIndex index= ui->tableViewShow->currentIndex();
    69. model->sort(index.column(), Qt::DescendingOrder);//降序
    70. ui->tableViewShow->setCurrentIndex(index);
    71. }
    72. void Widget::on_btnDelete_clicked()
    73. {
    74. int selectRow = ui->tableViewShow->currentIndex().row();
    75. model ->removeRow(selectRow);//删除当前行
    76. model->submitAll();
    77. model->select();
    78. }
    79. void Widget::on_btnAffair_clicked()
    80. {
    81. //声明事务:删除一行
    82. model->database().transaction();
    83. int selectRow = ui->tableViewShow->currentIndex().row();
    84. model->removeRow(selectRow);
    85. bool ret = model->submitAll();
    86. if(ret){
    87. int ret = QMessageBox::information(this,"删除确认","是否确认删除当前行",
    88. QMessageBox::Yes | QMessageBox::No);
    89. if(ret == QMessageBox::No){
    90. model->database().rollback();//回滚取消事务
    91. }
    92. else{
    93. model->database().commit();//提交事务
    94. }
    95. }
    96. model->select();//刷新view显示
    97. }

  • 相关阅读:
    【大全】HashMap夺命32连,帮助你面渣逆袭!
    Git工作流程最佳实践--git flow
    使用ext2fsd将装有Ubuntu的硬盘挂载到Windows后,导致Ubuntu系统无法启动
    JS-对象
    Django viewsets 视图集与 router 路由实现评论接口开发
    上线三天破百万点赞,涵盖90%以上的Java面试题,这份Java面试神技带你所向披靡
    linux only print matched part not whole line
    form表单与模板引擎
    瀑布流布局
    48.【C++map映射】
  • 原文地址:https://blog.csdn.net/XUXUECHEN/article/details/126901622