Qt实现简单的增删改查

1、首先在.pro文件中加入 QT += sql widgets

2、创建连接类connection.h

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("my.db");
    if(!db.open())
    {
        QMessageBox::critical(0,"Cannot open database1","Unable to establish a database",QMessageBox::Cancel);
        return false;
    }
    QSqlQuery query;

    //创建student表
    query.exec("create table student(id int primary key,name varchar,course int");
    query.exec("insert into student values(,'李强',11)");
    query.exec("insert into student values(2,'马良',11)");
    query.exec("insert into student values(3,'孙红',12)");

    //创建course表
    query.exec("create table course (id int primary key,name varchar,teacher varchar)");
    query.exec("insert into course values(10,'数学','王老师')");
    query.exec("create into course values (11,'英语','张老师')");
    query.exec("insert into course values(12,'计算机','白老师')");

    return  true;
}

3、mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();//修改提交

    void on_pushButton2_clicked();//撤销修改
    void on_pushButton3_clicked();//添加记录

    void on_pushButton4_clicked();//删除选中行
    void on_pushButton5_clicked();//按id升序排列

    void on_pushButton6_clicked();//按id 降序排列
    void on_pushButton7_clicked();//查询

    void on_pushButton8_clicked();//显示列表


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

4、mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QSqlQueryModel>
#include<QSqlTableModel>
#include<QSqlRelationalTableModel>
#include<QTableView>
#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()
{
    //开始事务操作
    model->database().transaction();
    if(model->submitAll())
    {
        QMessageBox::information(this,tr("tableModel"),tr("数据修改成功"));
    }
    else
    {
        model->database().rollback();  //回滚
        QMessageBox::warning(this,tr("tableModel"),tr("数据库错误:%1").arg(model->lastError().text()),
                             QMessageBox::Ok);
    }
}
//撤销修改
void MainWindow::on_pushButton2_clicked()
{
    model->revertAll();//事件回滚
}
//添加记录
void MainWindow::on_pushButton3_clicked()
{
    //获取表的行数
    int rowNum = model->rowCount();
    int id = 10;

    //添加一行
    model->insertRow(rowNum);
    model->setData(model->index(rowNum,0),id);

    //可以直接提交
    model->submitAll();
}
//删除选中行
void MainWindow::on_pushButton4_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();
    }
}
//按id升序排列
void MainWindow::on_pushButton5_clicked()
{
    //id字段  即第0列,升序排列
    model->setSort(0,Qt::AscendingOrder);
    model->select();
}
//按id 降序排列
void MainWindow::on_pushButton6_clicked()
{
    model->setSort(0,Qt::DescendingOrder);
    model->select();
}
//查询
void MainWindow::on_pushButton7_clicked()
{
    QString name = ui->lineEdit->text();

    //根据姓名进行筛选,一定要使用单引号
    model->setFilter(QString("name = '%1").arg(name));
    model->select();
}
//显示列表
void MainWindow::on_pushButton8_clicked()
{
    model->setTable("student");
    model->select();
}

5、在main.cpp中添加 if(!createConnection()) return 1;

6、mainwindow.ui

Qt 可以做什么?

Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。

大部分应用程序都可以使用 Qt 实现,除了与计算机底层结合特别紧密的,例如驱动开发,它直接使用硬件提供的编程接口,而不能使用操作系统自带的函数库。

下面的程序都使用 Qt 开发:WPS、YY语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Opera、咪咕音乐、Google地图、Adobe Photoshop Album 等。

Linux 也是嵌入式的主力军,广泛应用于消费类电子、工业控制、军工电子、电信/网络/通讯、航空航天、汽车电子、医疗设备、仪器仪表等相关行业。

Qt 虽然也支持手机操作系统,但是由于 Android 本身已经有Java和 Kotlin,iOS 本身已经有 Objective-C 和 Swift,所以 Qt 在移动端的市场份额几乎可以忽略。

总起来说,Qt 主要用于桌面程序开发和嵌入式开发。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值