10.11 Qt

ops/2024/10/18 8:24:24/

数据库查询案例

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>
#include <QInputDialog>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_addBtn_clicked();void on_showBtn_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");db.setDatabaseName("stu.db");}if(!db.open()){QMessageBox::information(this,"提示","数据库打开失败");return;}QSqlQuery querry;QString sql = "create table if not exists STU(id int,name char,sex char,score double);";if(!querry.exec(sql)){QMessageBox::information(this,"提示","数据表创建失败");return;}
}Widget::~Widget()
{delete ui;
}void Widget::on_addBtn_clicked()
{int ui_numb = ui->numbEdit->text().toUInt();QString ui_name = ui->nameEdit->text();QString ui_sex = ui->sexEdit->text();double ui_score = ui->scoreEdit->text().toDouble();if(ui_numb==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_numb).arg(ui_name).arg(ui_sex).arg(ui_score);QSqlQuery querry;if(!querry.exec(sql)){QMessageBox::information(this,"提示","添加信息失败");return;}else{QMessageBox::information(this,"提示","添加成功");}ui->numbEdit->clear();ui->nameEdit->clear();ui->sexEdit->clear();ui->scoreEdit->clear();
}void Widget::on_showBtn_clicked()
{QSqlQuery querry;QString sql = "select * from STU;";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++){ui->msgTable->setItem(i,j,new QTableWidgetItem(record.value(j).toString()));}i++;}
}void Widget::on_deleteBtn_clicked()
{int ui_numb = ui->numbEdit->text().toUInt();QString ui_name=ui->nameEdit->text();QString ui_sex=ui->sexEdit->text();double ui_score=ui->scoreEdit->text().toDouble();if (ui_numb == 0 && ui_name.isEmpty()&&ui_sex.isEmpty()&&ui_score==0){QMessageBox::information(this, "提示", "请输入有效的ID或姓名或性别或成绩");return;}if (ui_numb != 0){QString sql = QString("DELETE FROM STU WHERE id = %1;").arg(ui_numb);QSqlQuery query;if (!query.exec(sql)){QMessageBox::information(this, "提示", "删除信息失败");}else{QMessageBox::information(this, "提示", "删除信息成功");}}if (!ui_name.isEmpty()){QString sql1 = QString("DELETE FROM STU WHERE name = '%2';").arg(ui_name);QSqlQuery query1;if (!query1.exec(sql1)){QMessageBox::information(this, "提示", "删除信息失败");}else{QMessageBox::information(this, "提示", "删除信息成功");}}if (ui_score != 0){QString sql2 = QString("DELETE FROM STU WHERE score = %3;").arg(ui_score);QSqlQuery query2;if (!query2.exec(sql2)){QMessageBox::information(this, "提示", "删除信息失败");}else{QMessageBox::information(this, "提示", "删除信息成功");}}if (!ui_sex.isEmpty()){QString sql3 = QString("DELETE FROM STU WHERE sex = '%2';").arg(ui_sex);QSqlQuery query3;if (!query3.exec(sql3)){QMessageBox::information(this, "提示", "删除信息失败");}else{QMessageBox::information(this, "提示", "删除信息成功");}}ui->numbEdit->clear();ui->nameEdit->clear();ui->sexEdit->clear();ui->scoreEdit->clear();}void Widget::on_sortBtn_clicked()
{QStringList sortColumns;sortColumns << "numb" << "name" << "sex" << "score";bool ok;QString sortColumn = QInputDialog::getItem(this, "选择排序列","请选择要排序的列:",sortColumns, 0, false, &ok);if (!ok || sortColumn.isEmpty())return;QStringList sortOrders;sortOrders << "ASC" << "DESC";QString sortOrder = QInputDialog::getItem(this, "选择排序顺序","请选择排序顺序:",sortOrders, 0, false, &ok);if (!ok || sortOrder.isEmpty())return;QString sql = QString("SELECT * FROM STU ORDER BY %1 %2;").arg(sortColumn).arg(sortOrder);QSqlQuery query;if(!query.exec(sql)){QMessageBox::critical(this, "错误", "排序查询失败: " + query.lastError().text());return;}ui->msgTable->setRowCount(0);int row = 0;while(query.next()){ui->msgTable->insertRow(row);for(int col = 0; col < query.record().count(); ++col){QTableWidgetItem *item = new QTableWidgetItem(query.value(col).toString());ui->msgTable->setItem(row, col, item);}++row;}QMessageBox::information(this, "提示", "排序完成");
}

人脸识别系统

头文件

#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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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);VideoCapture video;//if(!video.open("D:\\opencv\\resourse\\01.mp4"))//{// QMessageBox::information(this,"提示","视频打开失败");// return;//}if(!video.open(0)){QMessageBox::information(this,"提示","视频打开失败");return;}Mat src;Mat gray;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)){cv::flip(src,src,1);cv::cvtColor(src,gray,CV_BGR2GRAY);cv::equalizeHist(gray,dest);c.detectMultiScale(dest,faces);//for(int i=0;i<src.rows;i++)//{// for(int j=0;j<src.cols;j++)// {//for(int k=0;k<3;k++)// {//  src.at<cv::Vec3b>(i,j)[k] = 255 - src.at<cv::Vec3b>(i,j)[k];//}//}//}for(uint i=0;i<faces.size();i++){cv::rectangle(src,faces[i],Scalar(0,0,255),2);cv::rectangle(gray,faces[i],Scalar(0,0,255),2);cv::rectangle(dest,faces[i],Scalar(0,0,255),2);}imshow("src",src);imshow("gray",gray);imshow("dest",dest);if(waitKey(30)==27){break;}}}Widget::~Widget()
{delete ui;
}


http://www.ppmy.cn/ops/124299.html

相关文章

git的基本使用

版本&#xff1a;软件版本&#xff0c;文件版本&#xff0c;保存重要的历史记录&#xff0c;恢复数据 版本控制软件的基础功能&#xff1a;保存和管理文件&#xff0c;提供客户端工具访问&#xff0c;提供不同版本文件比对功能 一、git基础概念 1.git的三个区域 工作区&…

XSS全详解

前言 我们下面进行下一个漏洞——XSS的学习&#xff0c;XSS是常见漏洞之一&#xff0c;算是Web安全必学漏洞。我们之前一直都以CTFHub为主线进行学习&#xff0c;但由于我们对常见漏洞进行强化学习的目的&#xff0c;CTFHub的题目并不能满足我们。为探讨清楚XSS的诸多细节&…

Leetcode 3312. Sorted GCD Pair Queries

Leetcode 3312. Sorted GCD Pair Queries 1. 解题思路2. 代码实现 题目链接&#xff1a;3312. Sorted GCD Pair Queries 1. 解题思路 这一题的话坦率来说没有搞定&#xff0c;后来是找的大佬的代码抄了一下…… 整体来说这道题思路上还是比较暴力的&#xff0c;还是一个二重…

数据结构 -- 跳表

文章目录 概要跳表的结构跳表的查找过程插入操作删除操作补充 概要 跳表&#xff08;Skip List&#xff09;是一种基于链表的数据结构&#xff0c;通过增加多级索引来加速查找、插入和删除操作。它可以看作是链表与二分查找的结合体&#xff0c;能够在保持数据有序的同时&…

探索CI/CD:持续集成与持续部署的基本概念

在现代软件开发中&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;已经成为提高开发效率和产品质量的关键实践。本文将详细介绍CI/CD的基本概念、优势以及如何在实际项目中实施CI/CD。 一、什么是持续集成&#xff08;CI&#xff09;&…

ECMAScript与JavaScript的区别:深入解析与代码示例

目录 引言 ECMAScript与JavaScript的定义 ECMAScript JavaScript ECMAScript与JavaScript的关系 区别详解 定义上的区别 功能上的区别 实现上的区别 代码示例 ECMAScript 6 (ES6) 特性示例 箭头函数 模板字面量 JavaScript 特有的扩展 在Web开发中的应用 ECMAS…

【Unity基础】Unity用脚本实现内购(IAP)

本文介绍了如何使用脚本实现内购功能。 先看下脚本&#xff0c;代码中根据执行过程添加了序号。 using UnityEngine; using UnityEngine.Purchasing; using UnityEngine.UI;namespace Samples.Purchasing.Core.BuyingConsumables {public class BuyingConsumables : MonoBeha…

【Android】限制TextView大小并允许滑动

关于TextView大小限制 TextView本身支持大小限制&#xff0c;但只支持固定值 这里改用屏幕比例来判断&#xff0c;按照屏幕剩余空间的一定比例来现在TextView最大尺寸 TextView滑动 当TextView空间不足时&#xff0c;需要通过滑动来查看剩余文本 TextView默认是禁用滑动特…