Qt笔记——数据库的图形界面

1将读取的数据通过表格的方式显示出来

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlTableModel>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_BtnAdd_clicked();

    void on_BtnSure_clicked();

    void on_BtnCancel_clicked();

    void on_BtnDel_clicked();

    void on_BtnFind_clicked();

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

#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QItemSelectionModel>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //打印Qt支持的数据库驱动
    qDebug()<<QSqlDatabase::drivers();
    //添加Sqlite数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库
    db.setDatabaseName("../info.db");

    //打开数据库
    if(!db.open())
    {
        QMessageBox::warning(this,"error",db.lastError().text());
        return;
    }

    //设置模型
    model = new QSqlTableModel(this);
    model->setTable("student");//指定使用哪个表
    //把model->放在view
    ui->tableView->setModel(model);
    //显示model的数据
    model->select();
    model->setHeaderData(0,Qt::Horizontal,"学号");

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

    //设置view中的数学库不允许修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_BtnAdd_clicked()
{
    //添加空记录
    QSqlRecord record = model->record();//获取空记录
    //获取行号
    int row = model->rowCount();
    model->insertRecord(row, record);
}

void Widget::on_BtnSure_clicked()
{
    model->submitAll();//提交动作
}

void Widget::on_BtnCancel_clicked()
{
    model->revertAll(); //取消所有动作
    model->submitAll(); //提交所有动作
}

void Widget::on_BtnDel_clicked()
{
    //获取选中的模型
    QItemSelectionModel *sModel = ui->tableView->selectionModel();
    //取出模型中的索引
    QModelIndexList list = sModel->selectedRows();
    //删除所有选中行
    for(int i = 0; i<list.size();i++)
    {
        model->removeRow(list.at(i).row());
    }
}

void Widget::on_BtnFind_clicked()
{
    QString name = ui->lineEdit->text();
    QString str = QString("name = '%1'").arg(name);//单引号不能忘
    model->setFilter(str);
    model->select();
}

 

posted @ 2018-04-15 21:57  大蓝鲸  阅读(1911)  评论(0编辑  收藏  举报