qt中采用model进行增删改查的简单数据库操作实例

4 篇文章 1 订阅

使用model 可以基本避免写sql语句环节,加快了编写速度,view为我们在界面看到的内容,model其实是为数据

如下为编写使用model进行增删改查

首先创建一个名为“info”的数据库文件置于当前qt文件的build目录下,其内容如图

ui 界面设计如下

456

       其中,增加键可以增加一空行,删除可以删除选中的数据,但是每次操作后必须点击确定或者取消,修改数据可以直接双击数据进行修改操作;

以下为源代码

#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_buttonDel_clicked();

    void on_buttonSure_clicked();

    void on_buttonCancel_clicked();

    void on_buttonAdd_clicked();

    void on_pushButton_5_clicked();

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

#endif // WIDGET_H
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}
#include "widget.h"
#include "ui_widget.h"
#include<QSqlDatabase>
#include<QDebug>
#include<QMessageBox>
#include<QSqlError>
#include<QSqlQuery>
#include<QVariantList>
#include<QString>
#include<QSqlRecord>


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QSqlDatabase a = QSqlDatabase::addDatabase("QSQLITE");   //创建数据库
    a.setDatabaseName("info");    //绑定数据库名称

    if(!a.open())
     {
         QMessageBox::warning(this,"错误",a.lastError().text(),
                              QMessageBox::Ok);
         return;
     }

    model = new QSqlTableModel(this);
    model->setTable("student");           //指定使用哪一个表
    ui->tableView->setModel(model);       //每个view对应一个model
    model->setHeaderData(0,Qt::Horizontal,"学号");   //第0列设置别名
    model->select();   //显示所有的列

    model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置手动提交后才可以修改

    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    //    设置view不可修改
}

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

void Widget::on_buttonDel_clicked() //再最后一行添加空记录
{
    QSqlRecord record = model->record();//获取空记录行
    int row = model->rowCount(); //获取当前的行号
    model->insertRecord(row,record);  //  插入行
}

void Widget::on_buttonSure_clicked()
{
    model->submitAll();//设置手动提交后,该键点击后会提交在view中的修改内容
}

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

void Widget::on_buttonAdd_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_pushButton_5_clicked()   //查找
{
    QString str = ui->lineEdit->text();
    QString sname = QString("name = '%1'").arg(str);//打包
    model->setFilter(sname);
    model->select();      //再次显示一次
}

直接运行效果如图:

点击增加后效果如下图,多了一空白行,双击可进行直接修改添加数据

进行删除操作可框选数据,鼠标框选第一行后点击删除  如下图

查找时在输入框输入需要查找的名字如 xiaolong,效果如下:

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值