10.11 Qt

embedded/2024/10/18 15:38:12/

数据库查询案例

头文件

#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/embedded/126326.html

相关文章

04_23 种设计模式之《单例模式》

文章目录 一、单例模式基础知识单例模式有 3 个特点&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这种模式通常用于管理共享资源&#xff0c;如…

【C++设计模式】行为型模式:中介者模式

行为型模式&#xff1a;中介者模式 中介者模式通过引入一个中介者对象来集中控制对象之间的交互。这样可以解耦多个对象之间的复杂交互关系&#xff0c;使系统更易于维护和扩展。 假设我们有一个简单的聊天室应用&#xff0c;其中有每个用户可以发送群聊消息给其他用户&#…

FiBiNET模型实现推荐算法

1. 项目简介 A031-FiBiNET模型项目是一个基于深度学习的推荐系统算法实现&#xff0c;旨在提升推荐系统的性能和精度。该项目的背景源于当今互联网平台中&#xff0c;推荐算法在电商、社交、内容分发等领域的广泛应用。推荐系统通过分析用户的历史行为和兴趣偏好&#xff0c;预…

Django ORM - 聚合查询

Django ORM - 聚合查询 Django ORM&#xff08;对象关系映射&#xff09;是一个强大的工具&#xff0c;它允许开发人员通过Python代码而不是SQL语句来操作数据库。在Django中&#xff0c;聚合查询是一种用于对数据库中的数据进行统计和分析的功能。通过使用Django ORM的聚合查…

你真的了解Canvas吗--解密七【ZRender篇】

书接上文你真的了解Canvas吗--解密六【ZRender篇】 目录 ❓解惑环节 再次梳理流程 step - 1 step - 2 step - 3 step - 4 冒泡函数dispatchToElement 总结 ❓解惑环节 首先来回答一下 先来看看目前调用on函数的地方 Eventful的属性_$handlers的key就有click, dbcl…

Golang 垃圾回收机制

垃圾回收机制 垃圾回收是程序语言自行管理内存的一种机制,它的主要原理是检测哪些内存块已经不再被使用的情况,然后回收这些内存块,以供后续程序使用. GC和手动释放内存的比较 GC的优势在于不需要程序员在编写程序时关心内存分配问题,只需专注于程序的编写即可,而手动释放内…

K210(openMV)与STM32 通信教程

目录 前言&#xff1a; 一、K210 串口部分教程 二、STM32部分 前言&#xff1a; 很多打比赛的同学&#xff0c;通常只是用K210 或者openMV来进行视觉部分的信息采集&#xff0c;传输数据给STM32&#xff08;或者其他主控那边&#xff09;进行对分析&#xff0c;对小车或者舵…

【操作系统】引导(Boot)电脑的奇妙开机过程

&#x1f339;&#x1f60a;&#x1f339;博客主页&#xff1a;【Hello_shuoCSDN博客】 ✨操作系统详见 【操作系统专项】 ✨C语言知识详见&#xff1a;【C语言专项】 目录 什么是操作系统的引导&#xff1f; 操作系统的引导&#xff08;开机过程&#xff09; Windows操作系…