可视化数据库操作

时间:2025-03-15 09:06:21

在Qt中,可视化操作用到了设计师designer中的view类,用于显示的处理数据,用已有的框架快速进行数据处理!!!

本环节主要是<QSqlTabelModel>头文件的使用:

1、select()接口主要是打印所选库中的数据,相当于使用sql语句:select * from student_info;

简单代码介绍:

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QDebug>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    void closeConnection();

    ~Widget();

private slots:
    void on_pb_add_clicked();

    void on_pb_del_clicked();

    void on_pb_sure_clicked();

    void on_pb_cancel_clicked();

    void on_pb_find_clicked();

private:
    Ui::Widget *ui;
    QSqlTableModel *model;
};

#endif // WIDGET_H

具体应用:

#include ""
#include "ui_widget.h"
#include <QSqlError>
#include <QSqlRecord>//保存记录

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    ("C:/Users/Lenovo/Desktop/Qtpros/QtDB/script/");
    if(!()){
        qCritical("Can't open database: %s(%s)",
        ().text().toLocal8Bit().data(),
        qt_error_string().toLocal8Bit().data());
     }

    //设置模型
    model = new QSqlTableModel(this);
    model->setTable("student_info"); //指定使用那个表//

    //把model放在view上
    ui->tableView->setModel(model);

    //显示model里的数据
    model->select();  //相当于select * from student_info;

    //设置表头为自己熟悉的语言
    model->setHeaderData(0, Qt::Horizontal, "学号");
    model->setHeaderData(1, Qt::Horizontal, "姓名");
    model->setHeaderData(2, Qt::Horizontal, "年级");
    model->setHeaderData(3, Qt::Horizontal, "专业");

    //设置model的模式为手动提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    //设置view中的数据库不允许修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
Widget::~Widget()
{
    delete ui;
}

void Widget::closeConnection()
{
    QSqlDatabase::database().close();

}

void Widget::on_pb_add_clicked()
{
    //添加空记录
    QSqlRecord record = model->record();//获取空记录

    //获取空记录的行号
    int row = model->rowCount();

    //增加空的新记录,静待用户在界面输入
    model->insertRecord(row,record);

}

void Widget::on_pb_del_clicked()
{
    //获取选中的模型
   QItemSelectionModel *sModel = ui->tableView->selectionModel();

   //取出模型中的索引,一个索引代表一个行号
   QModelIndexList list = sModel->selectedRows();

   //删除所有选中的行
   for(int i = 0; i < (); i++)
   {
       model->removeRow((i).row());
   }

}

void Widget::on_pb_sure_clicked()
{
    //提交所有的数据
    model->submitAll();
}

void Widget::on_pb_cancel_clicked()
{
    //取消所有动作
    model->revertAll();

    ///提交取消动作
    model->submitAll();
}

void Widget::on_pb_find_clicked()
{
    QString str = ui->lineEdit->text();
    model->setFilter(1);
    QString sql = QString("id = '%1'").arg(str);
    //以ID查找,设置过滤条件
    model->setFilter(sql);

    //select接口,显示所有的数据,相当于select * from student_info;
    model->select();
}