QT DAY6作业

news2024/12/23 16:44:20

1.学生管理系统,基于QT的数据库中数据表的增删改查

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlDatabase>  //数据库管理类
#include <QSqlQuery>   //执行sql语句类
#include <QSqlRecord>  //数据库记录类
#include <QSqlError>  //数据库错误类
#include <QMessageBox>  //消息对话框类

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_addBtn_clicked();

    void on_showBtn_clicked();

    void on_deleteBtn_clicked();

    void on_updateBtn_clicked();

private:
    Ui::Widget *ui;

    //实例化一个数据库
    QSqlDatabase db;
};

#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

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

    //判断数据库是否存在
    if(!db.contains("stuInfo.db"))
    {
        //说明数据库不存在,则创建
        db = QSqlDatabase::addDatabase("QSQLITE"); //增加一个数据库,驱动为sqlite3
        //给刚刚创建的数据库命名
        db.setDatabaseName("stuInfo");
    }
    //打开数据库
    if(!db.open())
    {
        QMessageBox::information(this,"","打开数据库失败");
        return;
    }
    //创建数据表
    //实例化一个执行sql语句的对象
    QSqlQuery query;
    //准备sql语句
    QString sql = "create table if not exists stu_info_table("
                  "id integer primary key autoincrement,"
                  "numb int,"
                  "name char(20),"
                  "sex char(4),"
                  "score int)";

    //执行sql语句
    if(query.exec(sql))
    {
       QMessageBox::information(this,"","创建数据库表成功");
    }else {
        QMessageBox::information(this,"","创建数据库表失败");
    }

}

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

//添加按钮对应的槽函数处理
void Widget::on_addBtn_clicked()
{
    //获取ui界面上学生信息
    int numb = ui->numbEdit->text().toUInt();
    QString name = ui->nameEdit->text();
    QString sex = ui->sexEdit->text();
    int score = ui->scoreEdit->text().toUInt();

    //判断用户是否填写完整信息
    if(numb == 0 || name.isEmpty() || sex.isEmpty() || score == 0)
    {
        QMessageBox::information(this,"","请将信息填写完整");
        return;
    }
    //实例化一个执行sql语句的对象
    QSqlQuery query;

    //准备sql语句
    QString sql = QString("insert into stu_info_table(numb,name,sex,score) "
                          "values(%1,'%2','%3',%4)").arg(numb).arg(name).arg(sex).arg(score);
    //执行sql语句
    if(query.exec(sql))
    {
        QMessageBox::information(this,"","添加成功");
        ui->numbEdit->clear();
        ui->nameEdit->clear();
        ui->sexEdit->clear();
        ui->scoreEdit->clear();
    }else {
        QMessageBox::information(this,"","添加失败");
    }
}

//显示按钮对应的槽函数处理
void Widget::on_showBtn_clicked()
{
    //实例化执行sql语句的对象
    QSqlQuery query;
    //准备sql语句
    QString sql = "select * from stu_info_table";
    //执行sql语句
    if(!query.exec(sql))
    {
         QMessageBox::information(this,"","查询失败");
         return;
    }

    //所查询的信息就已经存放到query对象中
    int i = 0; //记录行号
    while(query.next())
    {
        for(int j=0; j<query.record().count();j++)  //遍历列数
        {
            //将数据的数据放入ui界面
            ui->tableWidget->setItem(i,j,new QTableWidgetItem(query.value(j+1).toString()));
        }
        i++;  //行数递增
    }
}

//删除按钮对应的槽函数处理
void Widget::on_deleteBtn_clicked()
{
    //实例化执行对象
    QSqlQuery query;
    //获取ui界面上的删除关键词
    int numb = ui->numbEdit->text().toUInt();

    if(numb == 0)
    {
        QMessageBox::information(this,"","请输入删除学生学号");
        return;
    }
    //准备sql语句
    QString sql = QString("delete from stu_info_table where numb = %1").arg(numb);

    //执行sql语句
    if(query.exec(sql))
    {
        QMessageBox::information(this,"","删除成功");
        ui->numbEdit->clear();
        ui->tableEdit->clearcontens();
    }else {
        QMessageBox::information(this,"","删除失败");
    }
}

//修改按钮对应的槽函数处理
void Widget::on_updateBtn_clicked()
{
    //实例化执行对象
    QSqlQuery query;

    //获取修改信息
    int numb = ui->numbEdit->text().toUInt();
    QString name = ui->nameEdit->text();
    QString sex = ui->sexEdit->text();
    int score = ui->scoreEdit->text().toUInt();

    if(numb == 0)
    {
        QMessageBox::information(this,"","请输入修改学生学号");
        return;
    }
    if(!name.isEmpty())
    {
        //准备sql语句
        QString sql = QString("update stu_info_table set name = '%1' where numb = %2").arg(name).arg(numb);
        //执行sql语句
        if(query.exec(sql))
        {
            QMessageBox::information(this,"","修改成功");
            ui->numbEdit->clear();
        }else {
            QMessageBox::information(this,"","修改失败");
        }
        ui->nameEdit->clear();
    }
    if(!sex.isEmpty())
    {
        //准备sql语句
        QString sql = QString("update stu_info_table set sex = '%1' where numb = %2").arg(sex).arg(numb);
        //执行sql语句
        if(query.exec(sql))
        {
            QMessageBox::information(this,"","修改成功");
            ui->numbEdit->clear();
        }else {
            QMessageBox::information(this,"","修改失败");
        }
        ui->sexEdit->clear();
    }
    if(score != 0)
    {
        //准备sql语句
        QString sql = QString("update stu_info_table set score = %1 where numb = %2").arg(score).arg(numb);
        //执行sql语句
        if(query.exec(sql))
        {
            QMessageBox::information(this,"","修改成功");
            ui->numbEdit->clear();
        }else {
            QMessageBox::information(this,"","修改失败");
        }
        ui->scoreEdit->clear();
    }
}

修改效果图

删除效果图

2.MP4视频的灰度显示和均衡模式

源文件

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    //将本地的视频加载到程序中
    VideoCapture v;
    v.open("D:\\opencv\\heads\\01.mp4");

    //定义一个存放从视频中读取到的一帧图像
    Mat src;

    while(v.read(src))
    {

        //显示原图图像
        imshow("test1",src);


        //显示灰度图像
        //定义一个容器存放灰度图片
        Mat gray;

        //设置灰度
        cvtColor(src,gray,CV_BGR2GRAY);


        //显示灰度图像
        imshow("test2",gray);

        //显示均衡模式
        //定义一个容器存放均衡模式
        Mat dst;

        //均衡处理
        equalizeHist(gray,dst);

        //显示均衡图片
        imshow("test3",dst);

        if(waitKey(30) == 27)
        {
            break;
        }
    }


    return a.exec();
}

效果图

3.思维导图

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

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

相关文章

强化学习(二)多臂老虎机 “Multi-armed Bandits”——2

1、增量算法估计动作价值 由之前的内容可知&#xff0c;某一个动作被选择 n − 1 n-1 n−1 次后&#xff0c;该动作的价值估计值为 Q n ≐ R 1 R 2 ⋯ R n − 1 n − 1 Q_n\doteq\dfrac{R_1R_2\cdotsR_{n-1}}{n-1} Qn​≐n−1R1​R2​⋯Rn−1​​ 很明显&#xff0c;随着…

【AIGC-文本/图片生成视频系列-10】SparseCtrl:在文本生成视频的扩散模型中添加稀疏控制

目录 一. 项目概述 二. 方法详解 三. 应用结果 四.个人思考 由于扩散模型生成空间的不确定性&#xff0c;仅仅通过文本生成视频时&#xff0c;会导致模糊的视频帧生成。 今天解析的SparseCtrl&#xff0c;是一种有效解决上述问题的方案&#xff0c;通过带有附加编码器的时…

为啥4位单片机那么LOW,还没被淘汰?

我以为8位的51单片机已经够低端了&#xff0c;没想到竟然还有4位单片机&#xff01;它到底有什么优势&#xff1f;用在什么领域&#xff1f; 在刚开始学习单片机的时候&#xff0c;我一直以为用越高端的芯片就越牛逼。 而现实&#xff0c;公司做产品和我们单片机学习者&#xf…

12V充4.2V单节锂电池充电管理芯片

12V充4.2V单节锂电池充电管理芯片&#xff1a;高效、简单、实用的充电解决方案 随着智能设备的普及&#xff0c;电池充电管理已经成为一个热门话题。本文将介绍一款12V到4.2V*UIC9527单节锂电池充电管理芯片&#xff0c;它具有简单、高效、实用等特点&#xff0c;广泛应用于各…

spring boot学习第八篇:kafka

目录 1、安装kafka 1.1确认jdk是否安装OK 1.2下载kafka 1.3安装kafka 1.4验证kafka 2、连接kafka 3、在java中操作kafka 1、安装kafka 1.1确认jdk是否安装Ok java -version 1.2下载kafka wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-…

RTSP协议播放不兼容TPLINK摄像头的处理办法

报错的内容是Number of element invalid in origin string. 位置如图 数据内容是 "- 14665860 31787219 1 IN IP4 172.16.108.70" 两个数字中间多了一个空格&#xff0c;导致判断数据不等于6 所以数据输入的时候把中间的空格去掉一个即可。 if (array.Length …

【K8S 】K8S配置资源管理

一、Secret&#xff1a; 1、概念 用来保存密码。token&#xff0c;敏感的K8S资源 这类数据可以直接存放在镜像中&#xff0c;但是放在Secret中可以更方便的控制&#xff0c;减少暴露的风险 Secret&#xff1a;保存加密的信息 2、Secret类型&#xff1a; docker-registry&am…

如何有效构建进攻性的网络安全防护策略

文章目录 前言一、进攻性安全策略的价值&#xff08;一&#xff09;进攻性安全和防御性安全的区别&#xff08;二&#xff09;进攻性安全带来一种新的测试和防御的方法&#xff08;三&#xff09;进攻性安全策略也比防御性安全策略更具前瞻性 二、进攻性安全策略的类型&#xf…

Transformer 位置编码

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

LeetCode刷题---随机链表的复制

解题思路&#xff1a; 使用哈希表来解决该问题 因为题中要求是深拷贝 首先对原链表遍历&#xff0c;将原链表每个节点和新链表每个节点形成对应关系&#xff0c;存入到哈希表中&#xff0c;key为原链表的节点&#xff0c;value为新链表的节点。 之后重置辅助链表指向原链表头节…

Jmemter

一、背景 有时候需要自己观察某些接口在一定并发下处理能力如果&#xff0c;那么Jmeter是一个很好的工具。 我所需要测试的接口是http接口&#xff0c;通过postman就可以发起请求&#xff0c;但postman单笔请求太慢&#xff0c;需要持续给接口一定压力&#xff0c;那么需要用J…

Docker登录MySQL,密码正确却提示密码错误

当我输入了正确的MySQL密码的时候确提示我密码错误&#xff1a; ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES) docker run --name mysql_master \ -e MYSQL_ROOT_PASSWORD123123 \ -v /root/mysql_master/data:/var/lib/mysql \ -v /root…

【电商API】DIY网络爬虫收集电商数据

DIY网络爬虫收集电商数据 网络爬虫是最常见和使用最广泛的数据收集方法。DIY网络爬虫确实需要一些编程知识&#xff0c;但整个过程比一开始看起来要简单得多。 当然&#xff0c;爬虫的有效性取决于许多因素&#xff0c;例如目标的难度、网站方的反爬虫措施等。如果将网络抓取用…

Spring IOC 源码分析

​ 什么是 IoC IoC &#xff08;Inversion of control &#xff09;控制反转。它是一种思想不是一个技术实现。描述的是&#xff1a;Java开发领域对象的创建以及管理的问题。 例如&#xff1a;现有类A依赖于类B。传统的开发方式 &#xff1a;往往是在类A中手动通过new关键字…

华为埋头造车,躺赚的却是黄牛?

文 | AUTO芯球 作者 | 雷歌 华为和赛力斯正在重庆哼哧a哼哧建厂造车&#xff0c;黄牛却在网上倒卖订单躺着赚钱。 前两天雷歌刚去试驾了问界M9&#xff0c;现场一车难求。 今天回来一看&#xff0c;好家伙&#xff0c;咸鱼上&#xff0c;黄牛们大量倒卖M9的大定订单&#x…

2024年机器人和人工智能将通过4种方式改变行业

文 | BFT机器人 前言&#xff1a; 2023年是人工智能界充满创造性和突破性的一年&#xff0c;包括生成式人工智能在内的人工智能 (AI) 技术的出现引起了全球的关注并占据了头条新闻。然而&#xff0c;生成式人工智能在企业中的应用仍处于早期阶段&#xff0c;如何最好地利用这项…

Markdown 时序图绘制详解

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

消费增值模式:从五折购物到利润共享的商业逻辑

在当今的商业环境中&#xff0c;消费者和商家之间的关系已经不再是简单的买卖。如何让消费者在购物的同时&#xff0c;也能享受到更多的价值&#xff0c;成为了各大平台争相探索的焦点。近日&#xff0c;一种名为“消费增值模式”的创新逻辑正在引起广泛的关注。这一模式以产品…

iOS UI掉帧和卡顿优化解决方案记录

UI卡顿原理 在 VSync 信号到来后&#xff0c;系统图形服务会通过 CADisplayLink 等机制通知 App&#xff0c;App 主线程开始在 CPU 中计算显示内容&#xff0c;比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去&#xff0c;由 GPU 进行…

postman 简单测试(一)

1.postman官网 Postman API Platform 2.研究了一下postman 一些简单的功能&#xff0c;自己做个记录&#xff0c;同时希望能节约点测试时间。 2.1新建一个 collections 长期测的话&#xff0c;最好注册一个账号&#xff0c;开放更多功能。 2.2新建一个请求 后端要先搭建起来…