QT连接SQLITE数据库:界面操作(增删改查)

一:widget.ui界面设计:

拖拽左侧Table View控件到页面中,在右侧将其objectName 设置为"tableView",目的是将其设置为表格显示view。

拖拽左侧Push Button控件到页面中,分别为: 增加,删除,确认,取消,查找五个按钮。在右侧将其objectName 分别设置为"ButtonAdd" ; "ButtonDel" ;   "ButtonSure" ;  "ButtonCancel" ; ButtonFind。

拖拽左侧Line Edit控件到页面中,在右侧将其objectName 设置为"lineEdit",目的是将其设置为搜索框。

二.连接SQLITE数据库

1.pro文件添加sql模块。

2.添加对应头文件

3.首先打印了 Qt 支持的数据库驱动。

4.然后使用 QSqlDatabase 添加了一个 QSQLITE 类型的数据库连接,打开了指定路径的数据库文件。

5.创建了一个 QSqlTableModel 对象 model,并设置了要操作的表为 dbTT。

6.将这个数据模型 model 绑定到 UI 中的 tableView 上,并设置编辑策略为手动提交修改。

7.启动程序查看连接情况。

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

添加上述代码更改数据无法直接修改,需要点击确定按钮,才能实现对数据修改操作,可以注释掉这行代码,直接修改数据库(不需要点击确定按钮)。

三:增删改查功能实现。

widget.ui界面右上角,右键点击按钮,转到槽,选中clicked(),点击OK。

分别将五个按钮转到槽,自动在头文件生成代码。

1.增

添加头文件

#include <QSqlRecord>

QSqlRecord类提供了对数据库记录的访问和操作功能。

2.删

3.确定

4.取消

5.查

最后效果:

代码演示:
widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include "ui_widget.h"
#include <QWidget>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
#include <QObject>
#include <QSqlTableModel>
#include <QSqlRecord>


namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_ButtonAdd_clicked();

    void on_ButtonCancel_clicked();

    void on_ButtonDel_clicked();

    void on_ButtonFind_clicked();

    void on_ButtonSure_clicked();

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

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QWidget>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
#include <QObject>
#include <QSqlTableModel>


Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

        //打印Qt支持的数据库驱动
        qDebug() << QSqlDatabase::drivers();
        //添加数据库
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
        //设置数据库
        db.setDatabaseName("E:/TestSqllite.db");//info.db是数据库名称

        //打开数据库
        if(!db.open())
        {
          qDebug()<<"不能连接"<<"connect to mysql error"<<db.lastError().text();
          return ;
        }
        else
        {
         qDebug()<<"连接成功"<<"connect to mysql OK";
        }
        //设置模型
        model = new QSqlTableModel(this);
        model->setTable("dbTT");//指定使用那个表

        //把model放在view上

        ui->tableView->setModel(model);
        model->select();

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

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

        //修改表
        //model->setHeaderData(0,Qt::Horizontal,"ID");
}

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



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

    model->insertRecord(row,record);
}

void Widget::on_ButtonCancel_clicked()
{
    model->revertAll();
    model->submitAll();
}

void Widget::on_ButtonDel_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_ButtonFind_clicked()
{
        QString dataID = ui->lineEdit->text();

        QString str = QString("dataID = '%1' ").arg(dataID);

        model->setFilter(str);
        model->select();
}

void Widget::on_ButtonSure_clicked()
{
     model->submitAll();
}

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值