根据设计的员工注册界面编写相应功能
该界面设计为widget类型,可以嵌入到主界面
主函数添加头文件
#include "registerwin.h"
主函数添加(在创建数据库之前),目前会显示两个界面,用于测试相应功能,后续嵌入到主界面
RegisterWin ww;
ww.show();
设计界面及对应控件名称
遇到困难:注册模块注册人脸失败
解决方法:
1.先检查是否有语法逻辑错误导致无法注册
2. qdebug打印faceid查看faceid,发现faceid都为0,识别不了人脸,说明faceobject出现问题
3.检查faceobject模块导入的seetaface数据库 ,创建对象初始化之后还需要导入已有的人脸数据库
遇到困难:将头像保存到固定路径下命名都为0.jpg
解决方法:
查看转换编码
QString headfile = QString("./data/%1.jpg").arg(ui->nameEdit->text().toUtf8().Base64Encoding)
将Base64Encoding编码方式换为toBase64(),用QString包起来(为什么?)
QString headfile = QString("./data/%1.jpg").arg(QString(ui->nameEdit->text().toUtf8().toBase64()));
#include "registerwin.h"
#include "ui_registerwin.h"
#include <QFileDialog>
#include <qfaceobject.h>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QMessageBox>
#include <QDebug>
RegisterWin::RegisterWin(QWidget *parent) :
QWidget(parent),
ui(new Ui::RegisterWin)
{
ui->setupUi(this);
}
RegisterWin::~RegisterWin()
{
delete ui;
}
//重置
void RegisterWin::on_resetBt_clicked()
{
//清空数据
ui->nameEdit->clear();
ui->birthdayEdit->setDate(QDate::currentDate());//重置日期设置为当前日期
ui->addressEdit->clear();
ui->phoneEdit->clear();
ui->picFileEdit->clear();
}
//添加头像
void RegisterWin::on_addpicBt_clicked()
{
//通过文件对话框选择图片路径
QString filepath = QFileDialog::getOpenFileName(this);
ui->picFileEdit->setText(filepath);
//显示图片
QPixmap mmp(filepath);
mmp = mmp.scaledToWidth(ui->headpicLb->width());//根据宽度缩放,高度自适应
ui->headpicLb->setPixmap(mmp);
}
//注册
void RegisterWin::on_registerBt_clicked()
{
//1.通过照片,结合faceObject模块得到faceID
QFaceObject faceobj;
cv::Mat image = cv::imread(ui->picFileEdit->text().toUtf8().data());//从输入框路径拿到图片转为字节再转到char类型读取
int faceID = faceobj.face_register(image);
qDebug()<<faceID;
//把头像保存到一个固定路径下
QString headfile = QString("./data/%1.jpg").arg(QString(ui->nameEdit->text().toUtf8().toBase64()));//64位编码之后作为名称保存
//保存注册图像
cv::imwrite(headfile.toUtf8().data(), image);
//2.把个人信息存储到数据库employee
QSqlTableModel model;
model.setTable("employee");//绑定数据表,设置表名
QSqlRecord record = model.record();
//设置记录数据
record.setValue("name", ui->nameEdit->text());
record.setValue("sex",ui->mrb->isChecked()?"男":"女");
record.setValue("birthday", ui->birthdayEdit->text());
record.setValue("address",ui->addressEdit->text());
record.setValue("phone",ui->phoneEdit->text());
record.setValue("faceID", faceID);
//头像路径
record.setValue("headfile",headfile);
//把记录插入到数据库表格中
bool ret = model.insertRecord(0,record);
//3.提示注册成功
if(ret)
{
QMessageBox::information(this,"注册提示","注册成功");
//提交存到数据库
model.submitAll();
}else
{
QMessageBox::information(this,"注册提示","注册失败");
}
}