.pro

    1. QT += core gui sql

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include <QWidget>
    4. #include <QSqlTableModel>
    5. namespace Ui {
    6. class Widget;
    7. }
    8. class Widget : public QWidget
    9. {
    10. Q_OBJECT
    11. public:
    12. explicit Widget(QWidget *parent = nullptr);
    13. ~Widget();
    14. private slots:
    15. void on_buttonAdd_clicked();
    16. void on_buttonSure_clicked();
    17. void on_buttonqx_clicked();
    18. void on_buttonDel_clicked();
    19. void on_buttonFind_clicked();
    20. private:
    21. Ui::Widget *ui;
    22. QSqlTableModel *model;
    23. };
    24. #endif // WIDGET_H

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. #include <QSqlDatabase>
    4. #include <QDebug>
    5. #include <QMessageBox>
    6. #include <QSqlError>
    7. #include <QSqlTableModel>
    8. #include <QSqlRecord>
    9. Widget::Widget(QWidget *parent) :
    10. QWidget(parent),
    11. ui(new Ui::Widget)
    12. {
    13. ui->setupUi(this);
    14. // 添加MySql数据库
    15. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    16. // 连接数据库
    17. db.setHostName("127.0.0.1");
    18. db.setUserName("root"); // 数据库用户名
    19. db.setPassword("123456"); // 密码
    20. db.setDatabaseName("test"); // 使用哪个数据库
    21. // 打开数据库
    22. if (!db.open())
    23. {
    24. QMessageBox::warning(this, "错误", db.lastError().text());
    25. return;
    26. }else {
    27. // 设置模型
    28. model = new QSqlTableModel(this);
    29. model->setTable("student"); // 制定使用哪个表
    30. // 把model放在view
    31. ui->tableView->setModel(model);
    32. // 显示model里的数据
    33. model->select();
    34. model->setHeaderData(0, Qt::Horizontal, "学号");
    35. // 设置model的编辑模式,手动提交修改
    36. model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    37. // 设置view中的数据库不允许修改
    38. // ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    39. }
    40. }
    41. Widget::~Widget()
    42. {
    43. delete ui;
    44. }
    45. // 添加按钮
    46. void Widget::on_buttonAdd_clicked()
    47. {
    48. // 添加空记录
    49. QSqlRecord record = model->record(); // 获取空记录
    50. // 获取行号
    51. int row = model->rowCount();
    52. model->insertRecord(row, record);
    53. }
    54. // 确定按钮
    55. void Widget::on_buttonSure_clicked()
    56. {
    57. // 提交动作
    58. model->submitAll();
    59. }
    60. // 取消按钮
    61. void Widget::on_buttonqx_clicked()
    62. {
    63. model->revertAll(); // 取消所有动作
    64. model->submitAll(); // 提交动作
    65. }
    66. // 删除按钮
    67. void Widget::on_buttonDel_clicked()
    68. {
    69. // 获取选中的模型
    70. QItemSelectionModel * sModel = ui->tableView->selectionModel();
    71. // 取出模型中的索引
    72. QModelIndexList list = sModel->selectedRows();
    73. // 删除所有选中的行
    74. for(int i = 0; i < list.size(); i++)
    75. {
    76. model->removeRow(list.at(i).row());
    77. }
    78. }
    79. // 查找按钮
    80. void Widget::on_buttonFind_clicked()
    81. {
    82. // 取出要查找的条件
    83. QString name = ui->lineEdit->text();
    84. QString str = QString("name = '%1'").arg(name);
    85. // 查找
    86. model->setFilter(str);
    87. // 显示
    88. model->select();
    89. }

    image.png

    文件:ModelView.zip