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 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "image.h"
#include "http.h"

成员
private:
    QString fileName ;//图片文件名
    QString accessToken;//access-Token
    QSqlDatabase 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()<tableWidget->setColumnCount(4);

    //设置颜色交替
    ui->tableWidget->setAlternatingRowColors(true);

    //设置列的宽度自适应
    ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    //设置单元格嵌套到水平表头表格上
    for(int i=0; itableWidget->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语句,如果执行成功,返回true
    QSqlQuery query;
    int ret = query.exec(sql);
    if(ret == false)
    {
        qDebug()<<"select error:"<textBrowser->append(text);

    //更新表格控件
    updateTableUi();

    //出库的时候从数据库中进行删除
    sql = QString("delete   from  user  where carId='%1';")
                        .arg(carId);


    //执行sql语句,如果执行成功,返回true
    ret = query.exec(sql);
    if(ret == false)
    {
        qDebug()<<"delete error:"<

你可能感兴趣的:(qt,学习)