qt QSqlTableModel的简单使用(增、删、改、查)

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

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("1.db");
    if (!db.open())
    {
        qDebug() << "Failed to connect to database:" << db.lastError().text();
        return ;
    }
    QSqlQuery query;
    query.exec("create table mytable(id int, name QString, sex QString)");

    pTableModel = new QSqlTableModel(ui->tableView, db);
    pTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);// 编辑策略
    pTableModel->setTable("mytable");
 //   pTableModel->setFilter("name = '666'");
 //   pTableModel->setSort(pTableModel->fieldIndex("id"), Qt::AscendingOrder); // 增序排序

    if (!(pTableModel->select()))
    {
        if (pTableModel->lastError().isValid())
        {
            qDebug() << "Error:" << pTableModel->lastError();
        }
    }

    pTableModel->setHeaderData(pTableModel->fieldIndex("id"), Qt::Horizontal, "工号");
    pTableModel->setHeaderData(pTableModel->fieldIndex("name"), Qt::Horizontal, "姓名");
    pTableModel->setHeaderData(pTableModel->fieldIndex("sex"), Qt::Horizontal, "性别");

    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
    ui->tableView->setModel(pTableModel); // 设置数据模型
/*
    theSelection = new QItemSelectionModel(pTableModel); // 关联选择模型
    ui->tableView->setSelectionModel(theSelection); // 设置选择模型

    dataMapper = new QDataWidgetMapper();
    dataMapper->setModel(pTableModel); // 设置数据模型
    dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);

    dataMapper->addMapping(ui->lineEdit_ID, pTableModel->fieldIndex("id"));
    dataMapper->addMapping(ui->lineEdit_Name, pTableModel->fieldIndex("name"));
    dataMapper->addMapping(ui->lineEdit_sex, pTableModel->fieldIndex("sex"));
*/

}

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


void Widget::on_pushButton_add_clicked()
{
    // 插入记录
    QSqlRecord record = pTableModel->record();
    record.setValue("id", ui->lineEdit_id->text().toInt());
    record.setValue("name", ui->lineEdit_name->text());
    record.setValue("sex", ui->lineEdit_sex->text());
    bool ret = pTableModel->insertRecord(pTableModel->rowCount(), record); // -1 表示在表的末尾插入新记录
    if (!ret)
    {
        qDebug() << "insertRecord Error:" << pTableModel->lastError();
    }
    ret = pTableModel->submitAll();
    if (!ret)
    {
        qDebug() << "insertRecord Error:" << pTableModel->lastError();
    }
}


void Widget::on_pushButton_save_clicked()
{
    pTableModel->submitAll();
}


void Widget::on_pushButton_del_clicked()
{
    bool ret = pTableModel->removeRow(pTableModel->rowCount()-1); //删除最后一行
    if(!ret)
    {
        qDebug() << "删除数据失败";
        return;
    }
    ret = pTableModel->submitAll();
    if (!ret)
    {
        qDebug() << "insertRecord Error:" << pTableModel->lastError();
    }
}

demo下载:点击跳转

运行效果:

觉得有帮助的话,打赏一下呗。。

相关推荐
肖田变强不变秃26 分钟前
C++实现有限元计算 矩阵装配Assembly类
开发语言·c++·矩阵·有限元·ansys
王磊鑫31 分钟前
Java入门笔记(1)
java·开发语言·笔记
喜欢猪猪39 分钟前
分布式与微服务:构建现代应用的关键架构
开发语言·php
硬件人某某某1 小时前
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
java·开发语言·社区团购小程序·团购小程序·java社区团购小程序
kucupung1 小时前
【C++基础】多线程并发场景下的同步方法
开发语言·c++
Quantum&Coder1 小时前
Objective-C语言的计算机基础
开发语言·后端·golang
五味香1 小时前
Java学习,List 元素替换
android·java·开发语言·python·学习·golang·kotlin
Joeysoda1 小时前
Java数据结构 (从0构建链表(LinkedList))
java·linux·开发语言·数据结构·windows·链表·1024程序员节
迂幵myself1 小时前
14-6-1C++的list
开发语言·c++·list
扫地僧0091 小时前
(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计
java·开发语言