程序运行截图如下:
代码如下:
connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection(){
QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("my.db");
if(!db.open()){
QMessageBox::critical(NULL,"打开失败","不能建立连接.");
return false;
}
QSqlQuery query;
query.exec("create table student (id int primary key, "
"name varchar, course int)");
query.exec("insert into student values(1, '球球', 11)");
query.exec("insert into student values(2, '腿腿', 11)");
query.exec("insert into student values(3, '小美', 12)");
query.exec("create table course (id int primary key, "
"name varchar, teacher varchar)");
query.exec("insert into course values(10, '数学', '王老师')");
query.exec("insert into course values(11, '英语', '张老师')");
query.exec("insert into course values(12, '计算机', '白老师')");
return true;
}
#endif // CONNECTION_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QSqlTableModel;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
private:
Ui::MainWindow *ui;
QSqlTableModel *model;
};
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include "connection.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection())
return 1;
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QTableView>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
model=new QSqlTableModel(this);
model->setTable("student");
model->select();
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(model);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString name=ui->lineEdit->text();
model->setFilter(QString("name=%1").arg(name));
model->select();
}
void MainWindow::on_pushButton_2_clicked()
{
model->setTable("student");
model->select();
}
void MainWindow::on_pushButton_3_clicked()
{
model->database().transaction();
if(model->submitAll()){
if(model->database().commit()){
QMessageBox::information(this,"tableModel","数据修改成功!");
}
}
else{
model->database().rollback();
QMessageBox::warning(this,"tableModel",tr("数据库错误:%1").arg(model->lastError().text()));
}
}
void MainWindow::on_pushButton_4_clicked()
{
model->revertAll();
}
void MainWindow::on_pushButton_5_clicked()
{
int rowNum=model->rowCount();
int id=10;
model->insertRow(rowNum);
model->setData(model->index(rowNum,0),id);
}
void MainWindow::on_pushButton_6_clicked()
{
int curRow=ui->tableView->currentIndex().row();
model->removeRow(curRow);
int ok=QMessageBox::warning(this,"删除当前行","你确定要删除?",QMessageBox::Yes,QMessageBox::No);
if(ok==QMessageBox::No)
model->revertAll();
else
model->submitAll();
}
void MainWindow::on_pushButton_7_clicked()
{
model->setSort(0,Qt::AscendingOrder);
model->select();
}
void MainWindow::on_pushButton_8_clicked()
{
model->setSort(0,Qt::DescendingOrder);
model->select();
}