QT day06

发布于:2024-10-12 ⋅ 阅读:(124) ⋅ 点赞:(0)

在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();
}