qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库

目录

参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章

步骤    部分代码

新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量

配置ui界面

在构造函数中初始化数据库,表格控件,摄像头,开启摄像头

在析构函数中停止摄像头

在车辆入库和车辆出库按钮点击函数中实现拍照

在拍照完成的槽函数中实现判断标志位来决定是出库还是入库

上传http,查询数据库计算价格显示


参考前面发的几篇文章http识别车牌,sqlite3数据库、摄像头的文章

qt学习:多媒体Multimedia摄像头-CSDN博客

qt学习:QTSQL+连接sqlite数据库+增删改查-CSDN博客

qt学习:http+访问百度智能云api实现车牌识别-CSDN博客

步骤    部分代码

完整项目

qt学习:停车场管理系统+摄像头+http识别车牌+sqlite3数据库资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/weixin_59669309/88800578

新建一个项目,加入前面用到的http和image两个文件,和加入用到的模块和头函数和成员,加入前面用到的全局变量

头函数
#include <QFileDialog>
#include <QThread>
#include <QWidget>
#include <QDebug>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QThread>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QCameraViewfinder>
#include <QCameraImageCapture>
#include <QCamera>
#include <QCameraInfo>
#include <QImage>
#include <QBuffer>
#include <QString>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QEventLoop>
#include <QTextCodec>
#include "image.h"
#include "http.h"成员
private:QString fileName ;//图片文件名QString accessToken;//access-TokenQSqlDatabase db;//数据库对象QCamera *camera;//摄像头对象QCameraImageCapture* imageCapture;//摄像头拍照类的对象enum CaptureIdentify flag;//标志位全局变量
const QString baiduTokenUrl = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%1&client_secret=%2&";const char *client_id = "";//API Key
const char *secret_id = "";//Secret Key
const QString baiduImageUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/license_plate?access_token=%1";

配置ui界面

  1. 一个QTableWidget表格用于显示数据库数据
  2. 两个QPushButton按钮
  3. 一个QtextBrowser显示金额
  4. 一个QLabel用于显示摄像头画面

在构造函数中初始化数据库,表格控件,摄像头,开启摄像头

    //界面全屏this->showMaximized();//数据库的初始化//连接数据库,并且要指定你要连接哪一种数据库db = QSqlDatabase::addDatabase("QSQLITE");//指定你要操作的数据库文件名字db.setDatabaseName("xxx.db");//打开数据库文件,如果该文件不存在 则创建bool ret = db.open();if(ret == false){qDebug()<<db.lastError().text();return ;}//创建表QString sql = QString("create table if not test user(carId text,enterTime text,leaveTime text,money double);");//使用QSqlQuery类来执行操作,实例化一个sql语句执行类QSqlQuery的对象QSqlQuery query;//执行sql语句,如果执行成功,返回trueret = query.exec(sql);if(ret == false){qDebug()<<"create table error:"<<query.lastError().text();}//表格控件的初始化//设置表头列标题的文本QStringList list;list<<"车牌号"<<"入库时间"<<"出库时间"<<"消费金额";//设置表格控件的列数ui->tableWidget->setColumnCount(4);//设置颜色交替ui->tableWidget->setAlternatingRowColors(true);//设置列的宽度自适应ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//设置单元格嵌套到水平表头表格上for(int i=0; i<ui->tableWidget->columnCount(); i++){//实例化一个单元格类的对象QTableWidgetItem *item = new QTableWidgetItem;//向单元格写入文字item->setText(list.at(i));//设置字体QFont font = item->font();font.setBold(true);//加粗font.setPixelSize(32);item->setFont(font);//设置单元格嵌套到水平表头表格上ui->tableWidget->setHorizontalHeaderItem(i,item);}//从数据库中初始化数据updateTableUi();//摄像头的初始化initCamerea();//设置文件名fileName = "1.jpg";

在析构函数中停止摄像头

    //关闭命令camera->stop();//释放内存delete camera;

在车辆入库和车辆出库按钮点击函数中实现拍照

    //入库标志位,标志位会随着拍照完成的信号一起传入槽函数flag = Identify_Enter;//捕捉画面imageCapture->capture();//入库标志位,标志位会随着拍照完成的信号一起传入槽函数flag = Identify_Leave;//捕捉画面imageCapture->capture();

在拍照完成的槽函数中实现判断标志位来决定是出库还是入库

    qDebug()<<"onSaveCaptureImage";//将图片保存为1.jgp图片preview.save("1.jpg");if(flag == Identify_Enter){//入库,上传http,加入数据库,更新表格,显示价格onEnterIdentify();}else if(flag == Identify_Leave){//出库,上传http,加入数据库,更新表格,显示价格onLeaveIdentify();}

上传http,查询数据库计算价格显示

    //进行车牌识别//将图片上传http获取车牌号码QString carId = carIdentify();if(carId.isEmpty()){return;}//进入数据库中,进行比较,获取到该车牌的入库时间QString sql = QString("select * from user where carId='%1';").arg(carId);//执行sql语句,如果执行成功,返回trueQSqlQuery query;int ret = query.exec(sql);if(ret == false){qDebug()<<"select error:"<<query.lastError().text();}//如果找到了QString enterTime;QString leaveTime;double money;while (query.next()) {//找到了才会进来enterTime = query.value("enterTime").toString();leaveTime = query.value("leaveTime").toString();money  = query.value("money").toDouble();if(leaveTime.isEmpty())break;}//跟出库时间进行相减,得出停车时间,算出停车费用QDateTime lTime = QDateTime::currentDateTime();//相差的秒数int timeLength = QDateTime::fromString(enterTime).secsTo(lTime);money = timeLength;//更新数据库 --更新数据sql = QString("update  user set leaveTime='%1',money=%2 where carId='%3';").arg(lTime.toString()).arg(money).arg(carId);//执行sql语句,如果执行成功,返回trueret = query.exec(sql);if(ret == false){qDebug()<<"update error:"<<query.lastError().text();}//显示QString text = QString("车牌号为%1 出库,出库时间:%2  停车时间:%3秒  费用:%4").arg(carId).arg(lTime.toString()).arg(timeLength).arg(money);ui->textBrowser->append(text);//更新表格控件updateTableUi();//出库的时候从数据库中进行删除sql = QString("delete   from  user  where carId='%1';").arg(carId);//执行sql语句,如果执行成功,返回trueret = query.exec(sql);if(ret == false){qDebug()<<"delete error:"<<query.lastError().text();}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium css定位

selenium-css定位 element_css driver.find_element(By.CSS_SELECTOR, css表达式)css定位说明 selenium中的css定位&#xff0c;实际是通过css选择器来定位到具体元素&#xff0c;css选择器来自于css语法 css定位优点 语法简洁对比其他定位方式&#xff0c;定位效率更快对…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象&#xff0c;属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

React18构建Vite+Electron项目以及打包

一.先创建项目 cnpm create vite 选择React > JavaScript >cd react_vite > cnpm i >npm run dev 二.安装Electron依赖 指定版本相对稳定 cnpm i electron19.0.10 -D cnpm i vite-plugin-electron0.9.3 -D cnpm i electron-builder23.0.1 -D三.创建electron目录…

42、WEB攻防——通用漏洞文件包含LFIRFI伪协议编码算法代码审计

文章目录 文件包含文件包含原理攻击思路文件包含分类 sessionPHP伪协议进行文件包含 文件包含 文件包含原理 文件包含其实就是引用&#xff0c;相当于C语言中的include <stdio.h>。文件包含漏洞常出现于php脚本中&#xff0c;当include($file)中的$file变量用户可控&am…

Leetcode02.05:链表求和

一、题目描述 给定两个用链表表示的整数&#xff0c;每个节点包含一个数位。 这些数位是反向存放的&#xff0c;也就是个位排在链表首部。 编写函数对这两个整数求和&#xff0c;并用链表形式返回结果。 示例&#xff1a; 输入&#xff1a;(7 -> 1 -> 6) (5 -> 9 -…

大学电子学籍档案管理系统建设方案

一、项目背景 随着大学教育规模的扩大和信息化进程的加快&#xff0c;大学电子学籍档案管理系统的建设成为大学管理的重要内容。传统的纸质学籍档案管理方式存在信息难以共享、查询速度慢、存储空间占用大等问题&#xff0c;无法满足大学学籍管理的需求。因此&#xff0c;建设一…

centos安装inpanel

前置条件 安装python yum -y install python 安装 cd /usr/local git clone https://gitee.com/WangZhe168_admin/inpanel.git cd inpanel python install.py 安装过程需要设置账户 密码 端口号 我设置的是admin:admin 10050 使用 打开浏览器,输入 http://192.168.168.…

CentOS7搭建k8s-v1.28.6集群详情

文章目录 1.灌装集群节点操作系统1.1 设置hosts1.2 设置nameserver1.3 关闭防火墙1.4 关闭Selinux1.5 关闭Swap分区1.6 时间同步1.7 调整内核参数1.8 系统内核升级 2.安装Docker2.1 卸载旧Docker2.2 配置Docker软件源2.3 安装Docker 3.部署Kubernets集群3.1 设置 K8s 软件源3.2…

Day 1. 学习linux高级编程之Shell命令和IO

1.C语言基础 现阶段学习安排 2.IO编程 多任务编程&#xff08;进程、线程&#xff09; 网络编程 数据库编程 3.数据结构 linux软件编程 1.linux&#xff1a; 操作系统&#xff1a;linux其实是操作系统的内核 系统调用&#xff1a;linux内核的函数接口 操作流程&#xff…

第二篇:MySQL安装与配置(基于小皮面板(phpstudy))

在第一篇中介绍了数据库的相关概念&#xff0c;了解到SQL是用来操作数据库管理系统的语言&#xff0c;因此要学习数据库技术&#xff0c;数据库管理系统的配备是必不可少的&#xff01; 并且出于流行性与实惠性的双考量而选择MySQL这款数据库管理系统软件 一&#xff0c;工具推…

el-table动态合并

废话就不多说了&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; 合并行 // 方法一 <template><div class"container"><el-table :data"dataSource" :border"true":header-cell-style"{ font-weight: normal,…

《Lua程序设计》-- 学习10

环境&#xff08;Environment&#xff09; 具有动态名称的全局变量 全局变量的声明 由于Lua语言将全局变量存放在一个普通的表中&#xff0c;所以可以通过元表来发现访问不存在全局变量的情况。 正如前面所提到的&#xff0c;我们不允许值为nil的全局变量&#xff0c;因为值为…

LabVIEW风力发电机在线监测

LabVIEW风力发电机在线监测 随着可再生能源的发展&#xff0c;风力发电成为越来越重要的能源形式。设计了一个基于控制器局域网&#xff08;CAN&#xff09;总线和LabVIEW的风力发电机在线监测系统&#xff0c;实现风力发电机的实时监控和故障诊断&#xff0c;以提高风力发电的…

程序员为什么不喜欢关电脑?

目录 标题&#xff1a;程序员为何乐见电脑长时间处于关闭状态&#xff1f; 引言&#xff1a; 一、思维的延续性&#xff1a; 二、环境的连续性&#xff1a; 三、长时间开机的原因&#xff1a; 四、恢复成本的考量&#xff1a; 结论&#xff1a; 特别的&#xff1a; 不是…

DevOps落地笔记-11|持续集成:软件持续集成,发布信手拈来

上一讲我主要介绍了如何快速的构建环境&#xff0c;以及测试阶段对环境的要求。现在测试环境已经不是阻碍软件开发的障碍了&#xff0c;但另一个问题又出现了&#xff1a;每次测试结果不是不理想&#xff0c;就是问题太多无法继续测试。这是因为&#xff0c;团队成员平时都在自…

扫盲软件开发工具低代码

目录 一、低代码是什么&#xff1f; 二、低代码平台的优势和劣势都是什么&#xff1f; 三、低代码操作方式 四、写在最后 一、低代码是什么&#xff1f; 低代码是一套可视化开发工具&#xff0c;它帮开发者把前后端基础功能写扎实&#xff0c;开发者只需要通过填表配置或拖…

Eclipse离线安装maven、jetty、svn插件;附百度网盘资源链接

Eclipse离线安装maven、jetty、svn插件&#xff1b;附百度网盘资源链接 链接&#xff1a;https://pan.baidu.com/s/1zt4-K4AvGZ4EnSqp0vfDGA 提取码&#xff1a;7980

动态扩缩容下的全局流水号设计

关于全局流水号&#xff0c;业内用的比较多的就是雪花算法&#xff0c;一直没理解在动态扩缩容下其中的workId和 datacenterId如何设置&#xff0c;查到了几个方法&#xff1a;reidis中取&#xff0c;待后期实践下。 先简单的介绍一下雪花算法&#xff0c;雪花算法生成的Id由…

代码随想录Day42 | 背包问题理论 416. 分割等和子集

代码随想录Day42 | 背包问题理论 416. 分割等和子集 二维dp解决背包问题一维dp求解背包问题46.携带研究材料二维dp一维dp 416.分割等和子集 二维dp解决背包问题 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 带你学透0-1背包问题 状态 利用五部曲来分析二维dp是如何解…

CF1404BTree Tag/ BZOJ0487. 树上追逐详解

1.题目 传送门:Tree Tag - 洛谷 2.思路 我们考虑什么情况下Alice可以获胜. 如果​ ≤ da&#xff0c;则Alice可以一步就追上Bob. 如果Alice处在一个能覆盖整棵树的点&#xff0c;即2da 1≥树的直径&#xff0c;那么Bob也无论走到哪里Alice都能追到,Alice获胜. 其它情况下…