SQLite是一款轻型的数据库,是遵守ACID的关系式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
1、首先在pro文件中加入:
QT += core gui sql
2、创建batabase.h文件:
#ifndef DATABASE_H
#define DATABASE_H
#include
#include
#include
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
if(!db.open()) return false;
QSqlQuery query;
query.exec(QObject::tr("create table student (id int primary key, name vchar)"));
query.exec(QObject::tr("insert into student values (0,'刘明')"));
query.exec(QObject::tr("insert into student values (1,'陈刚')"));
query.exec(QObject::tr("insert into student values (2,'王红')"));
return true;
}
#endif // DATABASE_H
3、main.cpp代码片段:
#include
#include
#include "widget.h"
#include "batabase.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection())
return 1;
Widget w;
w.show();
return a.exec();
}
4、绘制ui文件
5、widget.h代码片段:
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QSqlTableModel *model;
private slots:
void on_checkBoxbold_clicked(bool checked);
void on_radioButtonred_clicked();
void on_radioButtongreen_clicked();
void on_pushButtonqueren_clicked();
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_5_clicked();
void on_pushButton_4_clicked();
void on_pushButtonguanbi_clicked();
void on_tableView_clicked(const QModelIndex &index);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
6、widget.cpp代码片段:
#include "widget.h"
#include "ui_widget.h"
#include
#include
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
model = new QSqlTableModel(this);
model->setTable("student");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select(); //选取整个表的所有行
// model->removeColumn(1); //不显示name属性列,如果这时添加记录,则该属性的值添加不上
ui->tableView->setModel(model);
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_checkBoxbold_clicked(bool checked)
{
QFont font = ui->lineEditshuru->font();
font.setBold(checked);
ui->lineEditshuru->setFont(font);
}
void Widget::on_radioButtonred_clicked()
{
QPalette plet = ui->lineEditshuru->palette();
plet.setColor(QPalette::Text, Qt::red);
ui->lineEditshuru->setPalette(plet);
}
void Widget::on_radioButtongreen_clicked()
{
QPalette plet = ui->lineEditshuru->palette();
plet.setColor(QPalette::Text, Qt::green);
ui->lineEditshuru->setPalette(plet);
}
void Widget::on_pushButtonqueren_clicked()
{
QString name = ui->lineEditshuru->text();
ui->labelwenben->setText(name);
}
void Widget::on_pushButton_clicked()
{
int rowNum = model->rowCount(); //获得表的行数
int id = 10;
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交
}
void Widget::on_pushButton_2_clicked()
{
int curRow = ui->tableView->currentIndex().row();
//获取选中的行
model->removeRow(curRow);
//删除该行
int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定"
"删除当前行吗?"),QMessageBox::Yes,QMessageBox::No);
if(ok == QMessageBox::No)
{
model->revertAll(); //如果不删除,则撤销
}
else model->submitAll(); //否则提交,在数据库中删除该行
}
void Widget::on_pushButton_3_clicked()
{
model->database().transaction(); //开始事务操作
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滚
QMessageBox::warning(this, tr("tableModel"),
tr("数据库错误: %1")
.arg(model->lastError().text()));
}
}
void Widget::on_pushButton_5_clicked()
{
model->revertAll();
model->setTable("student"); //重新关联表
model->select(); //这样才能再次显示整个表的内容
}
void Widget::on_pushButton_4_clicked()
{
QString name = ui->lineEdit->text();
model->setFilter(QObject::tr("name = '%1'").arg(name)); //根据姓名进行筛选
model->select(); //显示结果
}
制作不易,感谢您的点赞