Qt数据库与QTableWidget结合的增删改查

qt tablewidget 实现分页功能_Qt数据库与QTableWidget结合的增删改查 大家好!再过一段时间是2020年的农历新年,预祝大家新年安康!之前和大家简单介绍过Qt Sqlite数据库的使用,不过过于简单,这次结合QTableWidget一起再次介绍下。一、 基础知识SQLite简介SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。2. 引入SQL模块 在... 阅读详情

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

大家好!再过一段时间是2020年的农历新年,预祝大家新年安康!

 

之前和大家简单介绍过Qt Sqlite数据库的使用,不过过于简单,这次结合QTableWidget一起再次介绍下。

 

一、 基础知识

 

1. SQLite简介

SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。

Qt5以上版本可以直接使用SQLite(Qt自带驱动)。

 

2. 引入SQL模块在Qt项目文件(.pro文件)中,加入SQL模块:

QT       += sql

 

3. Ubuntu下数据库SQLite查看软件

SQLite database browser 

二、 程序功能简介

 

程序先添加数据库、设置数据库名称,之后判断‘student’table 是否存在,不存在则创建;创建后添加数据作为QTableWidget的初始化显示。

 

程序中数据库与QTableWidget结合,实现增、删、改、查等基础功能。

 

QTableWidget实现了动态添加Item的小功能。

 

三、 各模块程序功能介绍

 

1. 头文件

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

2. 检查连接、添加数据库驱动、设置数据库名称。

if (QSqlDatabase::contains("dh_sql_default_connection"))
    {
        m_db = QSqlDatabase::database("dh_sql_default_connection");


        qDebug() << "contains";
    }
    else
    {
        m_db = QSqlDatabase::addDatabase(
                    "QSQLITE", "dh_sql_default_connection");


        m_db.setDatabaseName("mydb.db");
}

addDatabase()的参数QSQLITE是SQLite对应的驱动名,不能改。

setDatabaseName()的参数是数据库文件名。如果数据库不存在则自动创建;如果存在,则之后的操作会在已有的数据库上进行。

用户名,密码可以随便取,也可以省略,本例子中省略。

不过一直没有进入else,以后有时间探索下。

3. 创建表单以及查询表单是否存在

if(m_db.open()==true)
    {
        QSqlQuery query(m_db);


        QString tableName = "student";


        bool isTableExist = m_db.tables().contains(tableName);


        if(!isTableExist)
        {
            // create table
            bool ret = query.exec(QString("create table %1(id int ,name varchar(255))").arg(tableName));
            qDebug() << "create table ret" << ret << "table does not exist";


            initDatabaseData();   //初始化添加三条数据
        }
        else
        {
            qDebug() << "table exists";
        }
    }

创建student表单,两个是数据分别是id(int)和name(varchar) 。

 

使用int tableExist = query.exec(QString("select count(*) from sqlite_master \

      where type='table' and name='%1'").arg(tableName));

这个进行查询,总是返回true,所以使用了Qt自带的查询方式。

4. 一些函数

①  initDatabaseData()

void DataBaseWidget::initDatabaseData()
{
    if(m_db.open()==true)
    {
        QSqlQuery query(m_db);
        if(query.exec("insert into student values(0,'大皮')"))
        {
            qDebug("insert data 大皮 success");
        }


        if(query.exec("insert into student values(1,'中皮')"))
        {
            qDebug("insert data 中皮 success");
        }


        if(query.exec("insert into student values(2,'小皮')"))
        {
            qDebug("insert data 小皮 success");
        }
    }
}

②  更新QTableWidget

void DataBaseWidget::updataTablewidgetData()
{
    if(true == m_db.open())
    {
        QSqlQuery query(m_db);
        if(query.exec("select * from student"))
        {
            ui->tableWidget->clearContents();
            ui->tableWidget->setRowCount(0);


            while(query.next())
            {
                int rowCount = ui->tableWidget->rowCount();


                ui->tableWidget->insertRow(rowCount);


                QTableWidgetItem *columnItem0 = new QTableWidgetItem(
                            query.value(0).toString());
                QTableWidgetItem *columnItem1 = new QTableWidgetItem(
                            query.value(1).toString());


                ui->tableWidget->setItem(rowCount,0, columnItem0);
                ui->tableWidget->setItem(rowCount,1, columnItem1);


            }
        }
    }
}

这里面主要是QTableWidget的动态增加行数。遍历数据库中id和name后显示到QTableWidget上。

③  插入数据

void DataBaseWidget::on_pbn_insertData_clicked()
{
    if(m_db.open()==true)
    {
        QString id = ui->le_id->text();
        QString name = ui->le_name->text();


        QSqlQuery query(m_db);
        if(query.exec(QString("insertin to student 
values(%1,'%2')").arg(id).arg(name)))
        {
            qDebug("insert data  success");
        }
    }


    updataTablewidgetData();
}

Sql 插入数据指令:

query.exec(QString("insertin to student values(%1,'%2')").arg(id).arg(name))

 

 

④  删除数据

void DataBaseWidget::on_pbn_deleteData_clicked()
{
    if(m_db.open())
    {
        QString id = ui->tableWidget->item(m_row, 0)->text();
        QString name = ui->tableWidget->item(m_row, 1)->text();


        QSqlQuery query(m_db);


        if(query.exec(QString("delete from student where id=%1 and name='%2'")
                      .arg(id).arg(name)))
        {
            qDebug("delete data success!");
        }
    }


    updataTablewidgetData();
}

Sql 删除数据指令:

query.exec(QString("delete from student where id=%1 and name='%2'")

                      .arg(id).arg(name))

 

 

⑤ 修改数据

void DataBaseWidget::on_pbn_changeData_clicked()
{
    if(m_db.open())
    {
        QString id = ui->tableWidget->item(m_row, 0)->text();
        QString name = ui->tableWidget->item(m_row, 1)->text();


        QSqlQuery query(m_db);
        if(query.exec(QString("update student set name='%1' where id=%2")
                      .arg(name).arg(id)))
        {
            qDebug("update data success");
        }


        updataTablewidgetData();
    }
}

Sql 修改数据指令:

query.exec(QString("update student set name='%1' where id=%2")

                      .arg(name).arg(id))

 

 

5. 程序效果

 

① 插入数据

②更改数据

6. 小结

之前总结过一个比较简单的SQlite Qt 的用法,这次在之前基础上又完善了一些。之后可以再添加数据库事务的用法以及连接池的用法。

 

一般嵌入式系统,在数据量不大的情况下使用SQlite 就够用了。

 

最后祝大家鼠年平安!

如需完整工程可在 公众号    Pou光明   后台留言!

C++与Qt桌面订餐系统开发实战:从模型视图到数据库操作 桌面应用程序开发是软件工程中的重要领域,它涉及用户界面设计、业务逻辑处理与数据持久化等核心环节。在C++生态中,Qt框架凭借其信号槽机制和模型/视图架构,为构建跨平台桌面应用提供了高效解决方案。信号槽实现了对象间的松耦合通信,而模型/视图分离了数据与界面,极大提升了代码的可维护性。这些技术对于开发需要处理本地数据存储、复杂交互逻辑的桌面软件具有重要价值,例如各类信息管理系统。本文将以一个完整的桌面订餐系统为例,具体展示如何运用Qt的模型/视图架构和SQLite数据库操作,实现从菜品浏览、购物车管理到订单生成 阅读详情

相关推荐

Qt与SQLite集成开发:从入门到实战的完整指南

数据库作为现代软件系统的核心组件,其核心原理是通过结构化方式存储和管理数据,为应用程序提供持久化支持。在众多数据库技术中,SQLite以其零配置、无服务器、单文件的轻量级设计脱颖而出,特别适合嵌入式系统和桌面应用的本地数据存储场景。Qt框架内置的SQL模块通过QSqlDatabase、QSqlQuery等核心类,为开发者提供了统一、跨平台的数据库操作接口,极大简化了数据库集成工作。在工程实践中,参数化查询是防止SQL注入攻击、确保数据安全的关键技术;而事务处理不仅能保证数据一致性,还能显著提升批量操作的性能

weixin_34268753的博客 368

QT:搭配tablewidget的数据库编程

【代码】QT:搭配tablewidget的数据库编程。

cxy255256的博客 1819

使用PyQt连接MySQL数据库并将查询结果显示在TableWidget表格中

在本文中,我们将使用PyQt来连接MySQL数据库,并将查询结果显示在TableWidget表格中。在构造函数中,我们创建了一个TableWidget控件和一个按钮。接下来,我们将创建一个简单的PyQt窗口,其中包含一个TableWidget控件和一个按钮,用于执行数据库查询操作。这将启动应用程序并显示一个窗口,其中包含一个TableWidget控件和一个按钮。接下来,我们清空表格的内容,并使用insertRow和setItem方法将查询结果显示在表格中。最后,我们关闭数据库连接。

CwFsharp的博客 795

QT实现把SQLite3数据库中表的数据加载到QTablewidget中

之前做的一个项目,用到QTablewidget,需要把数据库SQLite3中某一个表的数据加载到QTablewidget中。在此记录一下实现过程和代码。

weixin_55735677的博客 1577

QT笔记-QTableWidget显示和设置数据表格基础用法

1、数据编辑完成后,事件消息响应。

C_panpan的专栏 2638

使用QT实现动态数据绘制

在QT中,我们可以通过QPainter和QWidget来实现图形的绘制。而在绘制动态数据时,我们可以通过定时器和计时器来实现数据的更新和绘制。在这个函数中,我们将会获取随机生成的动态数据并更新到变量dataList中。然后,我们将使用QPainter来在QWidget控件上绘制这些数据。然后,我们定义一个计时器timer,并将其连接到槽函数updateData()。在槽函数中,我们将会更新并绘制动态数据。通过以上代码,我们可以实现在QT中使用QWidget控件绘制动态数据。使用QT实现动态数据绘制。

m0_47037246的博客 483

qt与mysql的增删改查_Qt数据库与QTableWidget结合的增删改查

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~大家好!再过一段时间是2020年的农历新年,预祝大家新年安康!之前和大家简单介绍过Qt Sqlite数据库的使用,不过过于简单,这次结合QTableWidget一起再次介绍下。一、基础知识1.SQLite简介SQLite(sql)是一款开源轻量级的 数据库 软件,不需要server,可以集成在其他软件中,...

weixin_39725193的博客 427

Qt C++ 应急物资调度系统

int quantity = QInputDialog::getInt(this, "编辑物资", "请输入新数量:", ui->inventoryTable->item(row, 2)->text().toInt(), 1, 1000, 1, &ok);QString name = QInputDialog::getText(this, "编辑物资", "请输入新名称:", QLineEdit::Normal, ui->inventoryTable->item(row, 1)->text());

寒寒豆豆软件公司的博客 58

qt int转换成qstring_Qt数据库与QTableWidget结合的增删改查

大家好!再过一段时间是2020年的农历新年,预祝大家新年安康!之前和大家简单介绍过Qt Sqlite数据库的使用,不过过于简单,这次结合QTableWidget一起再次介绍下。一、 基础知识SQLite简介SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。2. 引入SQL模块 在...

weixin_39861498的博客 473

Qt QTableWidget实战指南:从初始化到性能优化与自定义排序

在Qt开发中,模型/视图(Model/View)架构是数据展示的核心设计,它将数据存储与界面显示分离。QTableWidget作为QTableView的便捷子类,内置了默认模型并通过QTableWidgetItem管理单元格,大幅降低了表格开发门槛,特别适合中小规模数据的快速实现。然而,当数据量增大或交互复杂时,直接使用setCellWidget或默认排序方式往往会引发性能瓶颈与逻辑错误。理解item的生命周期、委托(delegate)的编辑机制,以及批量填充时的重绘与信号控制,成为提升表格流畅度的关键。从

weixin_28630185的博客 165

Qt数据库学生管理系统源码实战:从跑通到改造的完整指南

数据库驱动加载与Qt SQL模块是桌面应用开发的基础环节,其核心在于通过QSqlDatabase统一接口实现不同数据库的透明访问。QSqlTableModel等模型类将数据变更自动同步到视图,大幅降低界面与数据粘合成本。在课程设计、后台工具开发等场景中,掌握这套机制能快速构建带持久化存储的管理系统。本文以学生管理系统源码为例,拆解环境配置、建库建表、增删改查落地及常见避坑技巧,帮助开发者高效复用成熟代码,聚焦业务字段与界面改造。

weixin_34195546的博客 291

C++ Qt实战:员工信息管理系统开发全流程解析

数据库管理系统是现代软件开发的核心技术之一,通过SQLite等轻量级数据库实现数据的持久化存储。Qt框架作为跨平台C++图形界面开发工具,提供了QSQL模块实现数据库连接与操作。在工程实践中,结合C++面向对象编程,可以构建出功能完整的桌面应用程序。员工信息管理系统作为典型案例,涵盖了数据库设计、界面开发、业务逻辑封装等关键技术环节。该项目通过Qt的QTableWidget展示数据,利用QSqlQuery执行增删改查操作,体现了数据库与图形界面的联动机制。这种技术组合在企业管理、数据维护等场景具有广泛应用价

weixin_42567046的博客 347

手把手教学:利用AutoDL与vLLM快速部署DeepSeek-R1大模型实战指南

本文详细介绍了如何利用AutoDL平台和vLLM框架快速部署DeepSeek-R1大模型的实战指南。从服务器配置、vLLM安装优化到模型部署的两种方案,再到性能调优和生产环境建议,手把手教你高效完成大模型部署。特别针对国内开发者遇到的网络问题提供了稳定解决方案,并分享了显存优化、磁盘清理等实用技巧。

weixin_42531779的博客 327

Qt5 库存管理系统设计与实现(含登录验证与增删改查功能)

本系统基于 Qt5 实现了库存管理的基础功能,重点展示了 Qt 中界面交互、信号与槽机制、模块化设计的应用。通过登录验证、主界面操作、子对话框交互三个模块的配合,完成了 “验证 - 展示 - 操作” 的完整流程。信号与槽的跨窗口数据传递(如 Addmoddlg 向 MainWindow 传递商品数据)。QTableWidget 的行操作(插入、删除、数据更新)。模态对话框的使用(exec () 方法)及模式切换逻辑。后续可通过添加数据持久化和更多功能,逐步完善系统,使其达到生产级应用标准。

2401_87473180的博客 995

基于深度学习的中文方言识别模型训练实战

本文介绍了一个基于深度学习的中文方言识别模型开发流程。项目采用PyTorch框架和Chinese-BERT-wwm预训练模型,构建了包含BERT基础层、方言特征增强层和注意力机制的多方言分类系统。文中详细阐述了数据收集策略,包括从社交媒体、语料库和众包平台获取多源数据,并实现了文本清洗、同义词替换和回译等数据增强技术。模型架构部分展示了如何在BERT基础上添加方言特征提取层和多头注意力机制来提升识别性能。该方案支持普通话、粤语等6种主要方言的识别,目标准确率达90%以上,响应时间小于100ms,适用于智能客

电脑管家 1730

IMU卡尔曼滤波方法详细介绍

本文介绍了基于IMU和卡尔曼滤波的状态估计方法。系统采用9维状态向量(位置、速度、加速度计零偏),通过牛顿运动学建立状态方程,并利用外部位置观测进行校正。详细推导了状态转移矩阵和控制输入矩阵的形式,阐述了预测和更新的计算步骤。同时说明了过程噪声Q和观测噪声R的设置原则,其中Q反映模型不确定性,R取决于传感器精度。该方法可有效融合IMU测量与外部观测数据,实现位置、速度和偏置的联合估计。

haing2019的博客 757

Qt中使用QTableWidget绘制数据表格实例教程:项目推荐

Qt中使用QTableWidget绘制数据表格实例教程:项目推荐 去发现同类优质开源项目:https://gitcode.com/ 在Qt开发中,表格的绘制与处理是一个常见需求。本文将为您详细介绍一个Qt中使用QTableWidget绘制数据表格的实例教程,帮助您快速掌握相关技巧。 项目介绍 Qt中使用QTableWidget绘制数据表格实例教程是一个面向Qt编程初学者的教学资源。它以一个详尽的实...

gitblog_06789的博客 867

基于QEMU的openEuler aarch64虚拟机快速部署与漏洞验证指南

本文提供了一份基于QEMU在个人电脑上快速部署openEuler aarch64虚拟机的详细指南。内容涵盖从软件准备、目录规划、QEMU安装、虚拟磁盘创建到系统安装与SSH配置的全过程,并以CVE-2024-1086内核漏洞为例,演示了如何在该虚拟环境中进行安全漏洞的验证与补丁测试,为安全研究和运维测试提供了一个低成本、高效率的ARM架构沙箱环境。

earth的博客 439

【QT开发笔记-实战篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget 数据管理实战

本文详细介绍了QT开发中QTableWidget表格控件的实战应用,包括基础入门、数据增删改查、高级功能实现及性能优化技巧。通过学生信息管理系统案例,展示了如何高效管理表格数据,提升开发效率。特别适合QT开发者和常用控件使用者参考。

weixin_29309475的博客 366

从零到一:手把手教你用YonBuilder for NCC搭建NC Cloud 2021.11开发环境(含避坑指南)

本文详细指导如何使用YonBuilder for NCC搭建NC Cloud 2021.11开发环境,涵盖硬件要求、软件安装、YonBuilder配置及常见故障排除。特别提供避坑指南,帮助开发者快速上手NCC开发,确保环境配置的原子化分解和开发思维的体系化建立。

weixin_42523326的博客 346

【C/C++ 性能优化】了解cpu 从而进行C++ 高效编程

在当代软件开发领域,CPU(Central Processing Unit,中央处理器)的性能优化一直是一个核心议题。尤其是对于C++开发者而言,无论是在Linux平台还是其他操作系统中,都需要深刻理解CPU的工作原理以及如何充分利用CPU资源,以确保软件运行的高效性和稳定性。正如计算机科学家Donald Knuth在《计算机程序设计的艺术》中所说:“过早的优化是万恶之源”,然而,这并不意味着我们应该忽视性能优化——相反,我们需要在正确的时间以正确的方式进行优化。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4749
上一篇: Qt ModelView教程——设置表头与可编辑Table
下一篇: Qt Model View TreeView及对应Model
Pou光明
博客等级 码龄12年 3701粉丝 398原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值