Qt(10.11)

news2024/10/18 16:41:52

数据表

源代码:

#include "widget.h"
#include "ui_widget.h"
#include<QMessageBox>//消息对话框
#include<QDebug>
#include<QSqlRecord>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //想要添加某个数据库
    if(!db.contains("stu.db"))
    {
        //如果当前对象中没有包含所需的数据库,则添加一个数据库
        db=QSqlDatabase::addDatabase("QSQLITE") ;//添加sqlite3数据库
        db.setDatabaseName("stu.db");//设置数据库的名称
    }
//打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"提示","数据库打开失败");
        return ;
    }
    //准备创建数据表
    //实例化一个sql语句的执行者
    QSqlQuery queery;
    //准备sql语句
    QString sql = "create table if not exists STU(id int,name char,sex char,score double);";
    //执行sql语句
    if(!queery.exec(sql))
    {
        QMessageBox::information(this,"提示","数据表创建失败");
        return ;
    }
    //程序执行至此,表示数据表创建成功


}

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

void Widget::on_pushbtn_clicked()//添加信息按钮对应的槽函数
{
    //将ui界面上的相关信息获取下来
    int ui_numb =ui->numberEdit->text().toUInt();
    QString ui_name =ui->nameEdit->text();
    QString ui_sex = ui->nanEdit->text();
    double ui_score =ui->scoreEdit->text().toUInt();
    //判断信息中心是否为空
    if(ui_numb==0||ui_name.isEmpty()||ui_sex.isEmpty()||ui_score==0)
    {
        QMessageBox::information(this,"提示","请将信息填写完整");
        return ;
    }
    //准备sql语句
    QString sql =QString("insert into STU(id,name,sex,score) values(%1,'%2','%3',%4);")
            .arg(ui_numb).arg(ui_name).arg(ui_sex).arg(ui_score);
    //qDebug()<<sql;
    //实例化sql语句执行者
    QSqlQuery queery;
    //执行sql语句
    if(!queery.exec(sql))
    {
        QMessageBox::information(this,"提示","添加信息失败");
        return ;
    }
    else
    {
        QMessageBox::information(this,"提示","添加信息成功");
    }

}

void Widget::on_showbtn_clicked()
{
    QSqlQuery queery;
    QString sql="select *from STU;";
    if(!queery.exec(sql))
    {
        QMessageBox::information(this,"提示","查询失败");
        return ;

    }
    //功能:读取查询结果集的下一条记录,如果记录不为空,就返回真,否则返回假
    int i=0;//遍历结果集的行
    while(queery.next())
    {
        //记录当前记录
        QSqlRecord record =queery.record();
        //对当前记录进行操作
        for(int j=0;j<record.count();j++)
        {
            //qDebug()<<record.value(i).toString();
            //该循环中的value(i)表示的就是第i行第j列的元素
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));
        }
        i++;//表示行数增加
    }
}

void Widget::on_delbtn_clicked()
{
     QString name = ui->nameEdit->text();//获取要删除的名字
     QSqlQuery queery;
     //判断名字不为空
     if (name.isEmpty())
     {
             QMessageBox::information(this, "提示", "请输入要删除的姓名");
             return;
         }
     QString sql = QString("DELETE FROM STU WHERE name = '%1';").arg(name);//删除语句,同上
     if(!queery.exec(sql))
     {
         QMessageBox::information(this,"提示","数据删除失败");
         return ;
     }
     else
     {
         QMessageBox::information(this,"提示","数据删除成功");
     }
}

void Widget::on_sortbtn_clicked()
{

        // 实例化SQL执行者
        QSqlQuery queery;

        // 准备升序排序的SQL语句,根据成绩(score)进行排序
        QString sql = "SELECT * FROM STU ORDER BY score ASC;";

        // 执行查询操作
        if (!queery.exec(sql)) {
            QMessageBox::information(this, "提示", "排序查询失败");
            return;
        }

        // 清空表格数据
        ui->tableWidget->clear();

        // 遍历查询结果并显示到表格中
        int i = 0;
        while (queery.next()) {
            QSqlRecord record = queery.record();
            for (int j = 0; j < record.count(); j++) {
                ui->tableWidget->setItem(i, j, new QTableWidgetItem(record.value(j).toString()));
            }
            i++;
        }
    }

 排序:

删除:

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十、pico+Unity交互开发教程——射线抓取与更多交互功能

一、回顾与引入 回顾上一篇直接抓取的教程&#xff0c;VR交互一般需要可交互的对象&#xff08;Interactable&#xff09;和发起交互的对象&#xff08;Interactor&#xff09;。直接抓取和射线抓取的可交互对象无区别&#xff0c;可参考上一篇教程设置组件。两者区别在于发起…

【Vercel】Vercel静态部署踩坑

背景 在现代的软件开发中&#xff0c;自动化部署是一个不可或缺的环节。Vercel作为一个流行的前端部署平台&#xff0c;提供了与GitHub的无缝集成&#xff0c;使得开发者能够在每次提交代码后自动触发部署流程。然而&#xff0c;自动化部署过程中可能会遇到一些挑战&#xff0…

性能测试:流量回放工具-GoReplay!结合一款无需CA证书即可抓取HTTPS明文的工具,简直无敌

性能测试&#xff1a;流量回放工具-GoReplay&#xff01;结合一款无需CA证书即可抓取HTTPS明文的工具&#xff0c;简直无敌。 GoReplay 是一个开源网络监控工具&#xff0c;可以将实时 HTTP 流量捕获并重放到测试环境。 应用成熟的过程中&#xff0c;测试所需的工作量往往会成…

学习干货小白女友看完这篇文章后,面试工作和护网蓝队初级竟然秒通过!

小白女友看完这篇文章后&#xff0c;面试工作和护网蓝队初级竟然秒通过&#xff01; 前言&#xff1a;本文中涉及到的相关技术或工具仅限技术研究与讨论&#xff0c;严禁用于非法用途&#xff0c;否则产生的一切后果自行承担&#xff0c;如有侵权请联系。 还在学怎么挖通用漏…

【Linux】<互斥量>解决<抢票问题>——【多线程竞争问题】

前言 大家好吖&#xff0c;欢迎来到 YY 滴Linux系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…

老机MicroServer Gen8再玩 OCP万兆光口+IT直通

手上有一台放了很久的GEN8微型服务器&#xff0c;放了很多年&#xff0c;具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了&#xff0c;结果搬出去有了第1个孩子&#xff0c;孩子小的时候也没时间折腾&#xff0c;等孩子大一点的时候&#xff0c;又有…

MongoDB查询操作

&#x1f337;启动mongo &#x1f388;启动mongo shell &#xff08;1&#xff09;在指定目录下创建mongodb文件夹、其子文件夹data、log以及文件mongodb.log cd /home/ubuntu mkdir -p mongodb/data mkdir -p mongodb/log touch mongodb/log/mongodb.log(2)先执行mongodb命…

《计算机视觉》—— 疲劳检测

文章目录 一、疲劳检测实现的思想二、代码实现 一、疲劳检测实现的思想 了解以下几篇文章有助于了解疲劳检测的方法 基于dlib库的人脸检测 https://blog.csdn.net/weixin_73504499/article/details/142977202?spm1001.2014.3001.5501 基于dlib库的人脸关键点定位 https://blo…

基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的自动回复

目录 1.根据需要自动回复某些主题 2.调用doReply方法进行自动回复 1.根据需要自动回复某些主题 根据主题判断&#xff0c;哪些主题是需要自动回复的&#xff0c;比如设备登录&#xff0c;需要自动回复。 2.调用doReply方法进行自动回复&#xff08;代码不一定全部正确&#xf…

第 5 章:vuex

1. 理解 vuex vuex 是什么&#xff1a; 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&am…

安乃达:用CRM构建从销售到管理到售后的全链路数字化运营平台

安乃达驱动技术(上海)股份有限公司((简称&#xff1a;“安乃达”,股票代码为&#xff1a;“603350”))自2011年以来&#xff0c;公司通过多年的研发与积累现有直驱轮毂电机、减速轮毂电机和中置电机三大系列产品&#xff0c;并具备与电机相匹配的控制器、传感器、仪表等电驱动成…

springboot旧物置换网站

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 系统展示 【2024最新】基于JavaSpringBootVueMySQL的&#xff0c;前后端分离。 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;…

ThinkPHP 3.2 + Nginx 页面404问题

学习公司Callout项目时&#xff0c;发现公司项目所使用的TP版本是3.2&#xff0c;所以才可以使用例如&#xff0c;C,M,A等方法 因此我用phpEnv搭建了一个项目&#xff0c;域名为thinkphp&#xff0c;所选根目录如下 我打开网页&#xff0c;访问 thinkphp/ 和 thinkphp/index.p…

ROS 的 urdf 中 link 和 joint 的子标签中 origin 的含义

主要参考文章——主要文章&#xff0c;官方关于urdf的介绍和官方文档的翻译解析 link标签里面的origin含义 link标签里面有三个主要的子标签&#xff0c;分别是visual——连杆的外观和坐标系&#xff0c;collisoin——连杆的碰撞属性和inertial——连杆的惯性设置 首先&…

C++ | AVL树

前言 本篇博客讲解c中数据结构AVL树&#xff0c;看这篇博客之前请先去看&#xff1a;C | 二叉搜索树-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-m…

2024最新:零基础到精通的大模型AI产品经理全学习路线

随着人工智能技术的发展&#xff0c;尤其是大模型&#xff08;Large Model&#xff09;的兴起&#xff0c;越来越多的企业开始重视这一领域的投入。作为大模型产品经理&#xff0c;你需要具备一系列跨学科的知识和技能&#xff0c;以便有效地推动产品的开发、优化和市场化。以下…

第51期 C语言实现中断<一>

Q&#xff1a;怎样理解用C语言实现中断的过程呢&#xff1f; A&#xff1a;以下是一段使用C语言实现中断的主程序&#xff0c;和汇编语言实现中断一样也使用了定时器中断和按键中断。执行该主程序会在DE2-115的红色LED上显示流水灯&#xff0c;按下KEY1可以改变流水灯移动的…

FreeRTOS - 任务通知

1. 任务通知 所谓"任务通知"&#xff0c;你可以反过来读"通知任务"。 我们使用队列、信号量、事件组等等方法时&#xff0c;并不知道对方是谁。使用任务通知时&#xff0c;可以明确指定&#xff1a;通知哪个任务。 使用队列、信号量、事件组时&#xff…

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…