QT day06

news2024/10/12 8:10:15

在QT使用数据库实现学生管理系统

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_addBtn_clicked();

    void on_showBtn_clicked();

    void on_deleteBtn_clicked();

    void on_sortBtn_clicked();

private:
    Ui::Widget *ui;
    //实例化一个数据库对象
    QSqlDatabase db;
};
#endif // WIDGET_H

源文件:

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>
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 querry;
    //准备sql语句
    QString sql = "create table if not exists STU(id int, name char, sex char, score double);";
    //执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","数据表创建失败");
        return;
    }

}

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

//添加信息按钮对应的槽函数
void Widget::on_addBtn_clicked()
{
    //获取ui界面上的相关信息
    int ui_id = ui->idEdit->text().toUInt();
    QString ui_name = ui->nameEdit->text();
    QString ui_sex = ui->sexEdit->text();
    double ui_score = ui->scoreEdit->text().toDouble();

    //判断信息中是否有空的
    if(ui_id==0 || ui_name.isEmpty() || ui_sex.isEmpty() || ui_score==0)
    {
        QMessageBox::information(this,"提示","添加失败");
        return;
    }

    QString sql =  QString("insert into STU(id, name, sex, score) values(%1, '%2', '%3', %4);")
                            .arg(ui_id).arg(ui_name).arg(ui_sex).arg(ui_score);
    //实例化sql语句执行者
    QSqlQuery querry;
    //执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","添加失败");
        return;
    }
    else
    {
        QMessageBox::information(this,"提示","添加成功");
    }
}

//展示信息按钮对应的槽函数
void Widget::on_showBtn_clicked()
{
    ui->msgTable->clearContents();
    //实例化一个sql语句执行者
    QSqlQuery querry;
    //准备sql语句
    QString sql = "select * from STU";
    //执行sql语句
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","查询失败");
        return;
    }

    int i = 0;
    while(querry.next())
    {
        //获取当前记录
        QSqlRecord record = querry.record();
        //对当前记录进行操作
        for(int j=0; j<record.count(); j++)
        {
            //该循环中的value(j)表示的就是第i行j列的那个元素
            //record.value(j).toString();
            ui->msgTable->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));
            //将数据库中的字段封装成ui界面上的一条信息
            QTableWidgetItem *item = new QTableWidgetItem(record.value(j).toString());
            //展示信息
            ui->msgTable->setItem(i,j,item);
        }

        i++;
    }

}

//删除信息按钮对应的槽函数
void Widget::on_deleteBtn_clicked()
{

    QString ui_name = ui->nameEdit->text();
    //实例化一个sql语句执行者
    QSqlQuery querry;
    //准备sql语句
    QString sql = "DELETE FROM STU where name = ?";
    querry.prepare(sql);
    //根据添加绑定的姓名删除学生信息
    querry.addBindValue(ui_name);
    if(!querry.exec())
    {
        QMessageBox::information(this,"提示","删除失败");
        return;
    }
    QMessageBox::information(this,"提示","删除成功");
}

//排序按钮对应的槽函数
void Widget::on_sortBtn_clicked()
{
    //实例化一个sql语句的执行者
    QSqlQuery querry;
    //准备sql语句
    QString sql = "SELECT * FROM STU ORDER BY score ASC";
    if(!querry.exec(sql))
    {
        QMessageBox::information(this,"提示","排序失败");
        return;
    }
    QMessageBox::information(this,"提示","排序成功");
    //展示排序后的学生信息
    int i = 0;
    while(querry.next())
    {
        //获取当前记录
        QSqlRecord record = querry.record();
        //对当前记录进行操作
        for(int j=0; j<record.count(); j++)
        {
            //该循环中的value(j)表示的就是第i行j列的那个元素
            //record.value(j).toString();
            ui->msgTable->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));
            //将数据库中的字段封装成ui界面上的一条信息
            QTableWidgetItem *item = new QTableWidgetItem(record.value(j).toString());
            //展示信息
            ui->msgTable->setItem(i,j,item);
        }

        i++;
    }
}

主函数:

#include "widget.h"

#include <QApplication>

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

人脸识别:

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include<opencv2/face.hpp>
#include <vector>
#include <map>
#include <QMessageBox>
#include <QDebug>
#include <QFile>
#include <QTextStream>
#include <QDateTime>
#include <QTimerEvent>
#include<QtSerialPort/QtSerialPort>
#include<QtSerialPort/QSerialPortInfo>
using namespace  cv;
using namespace cv::face;
using namespace std;
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

源文件:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //打开本机摄像头只需将参数改为0
    if(!video.open(0))
    {
        QMessageBox::information(this,"提示","视频我文件打开失败");
        return;
    }
    //从视频流对象中不断读取出图像
    Mat src;    //用于存储读取出的图像
    Mat gary;
    Mat dest;

    //定义级联分类器
    CascadeClassifier c;

    //定义存储人脸矩形框的容器
    vector<Rect> faces;

    //给级联分类器装载分类模型
    if(!c.load("D:\\opencv\\resourse\\haarcascade_frontalface_alt.xml"))
    {
        QMessageBox::information(this,"提示","级联分类器加载失败");
        return;
    }

    while(video.read(src))
    {
        //src中就是成功读取下来的一张图像
        //解决镜像问题
        cv::flip(src, src, 1);


        //灰度处理:将三通道的彩色图转换成单通道的灰白图
        cv::cvtColor(src,gary,CV_BGR2GRAY);

        //均衡化处理图像 放大特征点
        cv::equalizeHist(gary,dest);
        c.detectMultiScale(dest,faces);

        //将得到的矩形框绘制到图像上
        for(uint i = 0;i<faces.size();i++)
        {
            cv::rectangle(src,faces[i],Scalar(0,0,255),2);
            cv::rectangle(gary,faces[i],Scalar(0,0,255),2);
            cv::rectangle(dest,faces[i],Scalar(0,0,255),2);
        }

        //将图像进行展示
        imshow("src",src);
        imshow("gary",gary);
        imshow("dest",dest);
        //使用延时函数
        if(waitKey(30) == 27)
        {
            break;
        }
    }

}

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

主函数:

#include "widget.h"

#include <QApplication>

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

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

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

相关文章

【通信协议讲解】单片机基础重点通信协议解析与总结(IIC,CAN,MODBUS...)

目录 一.IIC总线 基础特性&#xff1a; 配置特性&#xff1a; 时序特性&#xff1a; 二.SPI总线 基础特性&#xff1a; 配置特性&#xff1a; 时序特性&#xff1a; 三.串口通信 基础特性&#xff1a; 配置特性&#xff1a; 时序特性&#xff1a; 四.CAN总线 基础特性…

vue后台管理系统从0到1(5)

文章目录 vue后台管理系统从0到1&#xff08;5&#xff09;完善侧边栏修改bug渲染header导航栏 vue后台管理系统从0到1&#xff08;5&#xff09; 接上一期&#xff0c;我们需要完善我们的侧边狼 完善侧边栏 我们在 element 组件中可以看见&#xff0c;这一个侧边栏是符合我们…

I/O进程(Day26)

一、学习内容 I/O进程 标准IO 概念 针对文件的读写操作 文件IO最终达成的目的&#xff1a;将一个临时存在于内存中的数据&#xff0c;永久性的存放于磁盘当中 操作 文件IO的操作&#xff0c;需要这样的2个指针 一个指针&#xff1a;指向源数据&#xff0c;提供读取操作的指针 …

复杂系统学习

一、复杂网络分析在复杂性研究中的地位 1.复杂系统 系统中存在的复杂度从两个维度来看 ①系统自由度&#xff08;系统组成成分的数目&#xff09; ②相互作用&#xff08;线性到非线性的转换&#xff09; 复杂网络是复杂系统的骨架 复杂系统可以抽象成一个网络&#xff0…

大数据新视界 --大数据大厂之 Dremio:改变大数据查询方式的创新引擎

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【JVM】如何判断对象是否可以被回收

引用计数法&#xff1a; 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 优点&#xff1a;实现简单&#xff0c;判…

Visual Studio--VS安装配置使用教程

Visual Studio Visual Studio 是一款功能强大的开发人员工具&#xff0c;可用于在一个位置完成整个开发周期。 它是一种全面的集成开发环境 (IDE)。对新手特别友好&#xff0c;使用方便&#xff0c;不需要复杂的去配置环境。用它学习很方便。 Studio安装教程 Visual Studio官…

从这里看BD仓储如何改变物流效率?

BD仓储物流建设成为当代物流领域的核心要素&#xff0c;推动着整个行业朝向高效性与智能化水平不断提升。在BD仓储物流的创新浪潮中&#xff0c;RFID技术犹如一颗耀眼的明珠&#xff0c;凭借其无可比拟的特性获得了业界的广泛推崇与广泛应用。该技术通过无线信号与电子标签的互…

Python剪辑视频

import os from moviepy.editor import VideoFileClipvideo_dir r"E:\学习\视频剪辑" s_video_file "1.mp4" d_video_file "剪辑片段1.mp4" s_video_path os.path.join(video_dir, s_video_file) # 原视频文件路径 d_video_path os.path…

FDTD Solutions(时域有限差分)仿真技术与应用

FDTD Solutions是一款非常好用的微纳光学设计工具。该软件提供了丰富的设计功能&#xff0c;支持CMOS图像传感器&#xff0c;OLED和液晶&#xff0c;表面计量&#xff0c;表面等离子体&#xff0c;石墨烯&#xff0c;太阳能电池&#xff0c;集成光子组件&#xff0c;超材料&…

排序|归并排序|递归|非递归|计数排序(C)

归并排序 如果数组的左半区间有序&#xff0c;右半区间有序&#xff0c;可以直接进行归并 基本思想 快排是一种前序&#xff0c;归并是后序 每次取小尾插 void _MergeSort(int* a, int* tmp, int begin, int end) {if (end < begin)return;int mid (end begin) / 2;/…

go开发环境设置-安装与交叉编译

1. 引言 Go语言&#xff0c;又称Golang&#xff0c;是Google开发的一门编程语言&#xff0c;以其高效、简洁和并发编程的优势受到广泛欢迎。作为一门静态类型、编译型语言&#xff0c;Go在构建网络服务器、微服务和命令行工具方面表现突出。 在开发过程中&#xff0c;开发者常…

PyCharm打开及配置现有工程(详细图解)

本文详细介绍了如何利用Pycharm打开一个现有的工程&#xff0c;其中包括编译器的配置。 PyCharm打开及配置现有工程 1、打开工程2、配置编译器 1、打开工程 双击PyCharm软件&#xff0c;点击左上角 文件 >> 打开(O)… 选中想要打开的项目之后点击“确定” 2、配置编译器…

STM32学习--3-5 光敏控制传感器控制蜂鸣器

接线图 Buzzer.c #include "stm32f10x.h" // Device header void Buzzer_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode GPIO_Mode_O…

Microsoft Visual Studio安装gtest

1. 参考【Windows Visual Studio下安装和使用google test&#xff08;gtest&#xff09;】 https://blog.csdn.net/Bule_Zst/article/details/78420894 2. 编译gtest使用Win32模式。 3. 配置属性&#xff0c;C/C&#xff0c;常规&#xff0c;附加包含目录 …

【画质模组】古墓丽影mod,调色并修改光影,游戏画质大提升

大家好&#xff0c;今天小编我给大家继续引入一款游戏mod&#xff0c;这次这个模组主要是针对雷神之锤4进行修改&#xff0c;如果你觉得游戏本身光影有缺陷&#xff0c;觉得游戏色彩有点失真的话&#xff0c;或者说你想让雷神之锤4这款游戏增加对光线追踪的支持的话&#xff0c…

Java | Leetcode Java题解之第474题一和零

题目&#xff1a; 题解&#xff1a; class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp new int[m 1][n 1];int length strs.length;for (int i 0; i < length; i) {int[] zerosOnes getZerosOnes(strs[i]);int zeros zerosOnes[0]…

【红外传感器】STM32C8T6标准库使用红外对管

好好学习&#xff0c;天天向上 前言一、了解红外二、标准库的代码1.infrared.c2.infrared.h3.main.c4 现象 总结 前言 红外线&#xff1a;频率介于微波与可见光之间的电磁波。 参考如下 【STM32】标准库与HAL库对照学习教程外设篇–红外避障传感器 光电红外传感器详解&#…

查看 Excel 应用程序中已打开的 Excel 文件的完整路径

要查看 Excel 应用程序中已打开的 Excel 文件的完整路径&#xff08;全路径&#xff09;&#xff0c;你可以通过以下几种方法获取具体路径&#xff0c;尤其是在 VSTO 应用程序中。 方法1&#xff1a;使用 VSTO Excel 外接程序代码 在 VSTO 外接程序代码中&#xff0c;您可以直接…

前端反馈弹框组件封装

一、需求背景 需要针对某个功能进行用户调查反馈&#xff0c;设计一个弹框&#xff0c;进行后端入表记录&#xff0c;以便后期进行数据分析。 二、实现UI 三、代码留存 以vue为例 <template><div class"advice-container"><van-dialogv-model"…