• 记忆力减退之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. }

  • 相关阅读:
    SpringBoot文件上传深入浅出
    海报设计必备!五个免费网站分享,让你的创意得以充分展现!
    OneFlow框架添加算子实践:expand和repeat
    Python面向对象特性——多继承(概念、语法、代码演练、使用注意事项)
    Vue学习:axios
    SSM+基于java的企业任务流程管理系统开发 毕业设计-附源码221533
    数字图像处理课程实验 基于颜色布局描述符(CLD)图像特征提取算法使用Python实现简单的人脸检测功能并使用PyQt5构建简单的功能界面
    第九课 排序
    使用 Verilog 做一个可编程数字延迟定时器 LS7211-7212
    278:vue+openlayer中根据半径、起始角度、中心点绘制弧线
  • 原文地址:https://blog.csdn.net/XUXUECHEN/article/details/126901622