• Qt-可视化数据库操作


    1  简介

    参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=89

    说明:Qt可使用QSqlTableModel来进行数据库的可视化操作,将mode/view与数据库结合起来使用,本文主要介绍使用QSqlTableModel来显示数据库的方法。

    mode/view你就当作对象的可视化,这里我们操作的对象就是数据库。

    2  测试及说明

    我们需要使用的数据库已有一些数据,数据库如下:

    需要使用到Qt的Table View组件:

    创建的界面如下:

    可使用增加、删除、确认、取消、查找(已name进行查找)按钮来对数据库进行相应的操作。

    先给出运行测试的效果:

    代码步骤说明:

    (1)添加数据库、打开数据库、连接数据库

    这个步骤,之前的博客有介绍,就直接给出代码:

     1     //添加MySql数据库
     2     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
     3     //连接数据库
     4     db.setHostName("127.0.0.1");  //数据库服务器IP
     5     db.setUserName("root");    //数据库用户名
     6     db.setPassword("123456");  //密码
     7     db.setDatabaseName("test");  //使用哪个数据库
     8     //打开数据库
     9     if (db.open() == false) {
    10         QMessageBox::warning(this, "错误", db.lastError().text());
    11         return;
    12     }

    (2)设置模型

    1     //设置模型
    2     model = new QSqlTableModel(this);

    (3)指定使用哪张表

    1     //指定使用哪个表
    2     model->setTable("student");

    (4)把model放置到View里面

    1     //把model放置到view里面
    2     ui->tableView->setModel(model);

    (5)显示mode的数据

    1     //显示model里的数据
    2     model->select();

    (6)设置mode的编辑模式为手动提交修改

    1     //设置model的编辑模式,手动提交修改
    2     model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    (7)增加

    1 void Widget::on_pushButton_add_clicked()
    2 {
    3     //添加空记录
    4     QSqlRecord record = model->record();  //获取空记录
    5     //获取行号
    6     int row = model->rowCount();
    7     //添加空行
    8     model->insertRecord(row, record);
    9 }

    (8)删除

     1 void Widget::on_pushButton_delete_clicked()
     2 {
     3     //获取选中的模型
     4     QItemSelectionModel *sModel = ui->tableView->selectionModel();
     5     //取出模型中的索引
     6     QModelIndexList list = sModel->selectedRows();
     7     //删除所有选中的行
     8     for (int i = 0; i < list.size(); i++) {
     9         model->removeRow(list.at(i).row());
    10     }
    11 }

    (9)确认

    1 void Widget::on_pushButton_sure_clicked()
    2 {
    3     //提交所有动作
    4     model->submitAll();
    5 }

    (10)取消

    1 void Widget::on_pushButton_cancel_clicked()
    2 {
    3     //取下所有动作
    4     model->revertAll();
    5     //提交所有动作
    6     model->submitAll();
    7 }

    (11)查找

    1 void Widget::on_pushButton_find_clicked()
    2 {
    3     //以name进行查找
    4     QString key = ui->lineEdit->text();
    5     QString str = QString("name = '%1'").arg(key);
    6     //过滤条件
    7     model->setFilter(str);
    8     model->select();
    9 }

    完整代码如下:

     1 #include "widget.h"
     2 #include "ui_widget.h"
     3 #include <QDebug>
     4 #include <QSqlDatabase>
     5 #include <QMessageBox>
     6 #include <QSqlError>
     7 #include <QSqlQuery>
     8 #include <QSqlTableModel>
     9 #include <QSqlRecord>
    10 #include <QItemSelectionModel>
    11 
    12 Widget::Widget(QWidget *parent) :
    13     QWidget(parent),
    14     ui(new Ui::Widget)
    15 {
    16     ui->setupUi(this);
    17 
    18     //打印qt支持的数据库驱动
    19     qDebug() << QSqlDatabase::drivers();
    20 
    21     //添加MySql数据库
    22     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    23     //连接数据库
    24     db.setHostName("127.0.0.1");  //数据库服务器IP
    25     db.setUserName("root");    //数据库用户名
    26     db.setPassword("123456");  //密码
    27     db.setDatabaseName("test");  //使用哪个数据库
    28     //打开数据库
    29     if (db.open() == false) {
    30         QMessageBox::warning(this, "错误", db.lastError().text());
    31         return;
    32     }
    33     //设置模型
    34     model = new QSqlTableModel(this);
    35     //指定使用哪个表
    36     model->setTable("student");
    37     //把model放置到view里面
    38     ui->tableView->setModel(model);
    39     //显示model里的数据
    40     model->select();
    41 
    42 //    model->setHeaderData(0, Qt::Horizontal, "学号");
    43 
    44     //设置model的编辑模式,手动提交修改
    45     model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    46     //设置数据库不允许修改
    47 //    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    48 }
    49 
    50 Widget::~Widget()
    51 {
    52     delete ui;
    53 }
    54 
    55 void Widget::on_pushButton_add_clicked()
    56 {
    57     //添加空记录
    58     QSqlRecord record = model->record();  //获取空记录
    59     //获取行号
    60     int row = model->rowCount();
    61     //添加空行
    62     model->insertRecord(row, record);
    63 }
    64 
    65 void Widget::on_pushButton_delete_clicked()
    66 {
    67     //获取选中的模型
    68     QItemSelectionModel *sModel = ui->tableView->selectionModel();
    69     //取出模型中的索引
    70     QModelIndexList list = sModel->selectedRows();
    71     //删除所有选中的行
    72     for (int i = 0; i < list.size(); i++) {
    73         model->removeRow(list.at(i).row());
    74     }
    75 }
    76 
    77 void Widget::on_pushButton_sure_clicked()
    78 {
    79     //提交所有动作
    80     model->submitAll();
    81 }
    82 
    83 void Widget::on_pushButton_cancel_clicked()
    84 {
    85     //取下所有动作
    86     model->revertAll();
    87     //提交所有动作
    88     model->submitAll();
    89 }
    90 
    91 void Widget::on_pushButton_find_clicked()
    92 {
    93     //以name进行查找
    94     QString key = ui->lineEdit->text();
    95     QString str = QString("name = '%1'").arg(key);
    96     //过滤条件
    97     model->setFilter(str);
    98     model->select();
    99 }
    View Code
  • 相关阅读:
    解析Jquery取得iframe中元素的几种方法
    jquery 金额转换成大写
    MVC 后台管理框架 FineUIMvc 在线示例
    7个高性能JavaScript代码高亮插件
    layer弹出信息框API
    【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能
    一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
    ASP.NET MVC 3 技术(九) 301永久重定向不带www域名到带www的域名
    ASP.NET MVC 3 网站优化总结(三)Specify Vary: Accept-Encoding header
    ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/13339991.html
Copyright © 2020-2023  润新知