一: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();
}