#include "CasicBioRecWin.h" #include "ui_CasicBioRecWin.h" CasicBioRecWin::CasicBioRecWin(QWidget *parent) : QMainWindow(parent) , ui(new Ui::CasicBioRecWin) { ui->setupUi(this); // 程序启动时初始化缓存的数据 this->initCacheData(); // 设置窗口透明和大小、位置 this->setWindowFlags(Qt::FramelessWindowHint); this->move(0, 0); this->resize(SettingConfig::getInstance().WINDOW_WIDTH, SettingConfig::getInstance().WINDOW_HEIGHT); // 通过调色板的颜色来设置窗口的统一背景色 qApp->setPalette(QPalette(QColor(SettingConfig::getInstance().WINDOW_BACKGROUND_COLOR))); // 初始化各个form界面并绑定切换响应函数 initFormsPtr(); // 初始化识别和注册的各个线程 initFaceRegistThread(); // 人脸注册线程 initFaceRecogThread(); // 人脸识别线程 // 初始化人脸相机控制 ProMemory::getInstance().faceCam = new FaceCameraController(this); ProMemory::getInstance().faceCam->openFaceCamera(1000); connect(ProMemory::getInstance().faceCam, &FaceCameraController::sendImageToDraw, addPersonForm, &AddPersonForm::drawImageOnForm); connect(ProMemory::getInstance().faceCam, &FaceCameraController::sendImageToDrawForRecognize, recogResultForm, &RecognizeResultForm::drawImageOnHomeForm); // 打印日志 LOG(INFO) << QString("应用程序启动成功[Application Startup Success]").toStdString(); ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::MAIN_PAGE; } CasicBioRecWin::~CasicBioRecWin() { ProMemory::getInstance().faceRegistPro->exitThread(); ProMemory::getInstance().faceRegistPro->deleteLater(); ProMemory::getInstance().faceRegistPro->wait(); ProMemory::getInstance().faceRecogPro->exitThread(); ProMemory::getInstance().faceRecogPro->deleteLater(); ProMemory::getInstance().faceRecogPro->wait(); delete ui; delete ProMemory::getInstance().faceRegistPro; delete ProMemory::getInstance().faceRecogPro; } void CasicBioRecWin::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Escape: QTimer::singleShot(100, qApp, SLOT(quit())); default: QWidget::keyPressEvent(event); } } void CasicBioRecWin::backToStandByForm() { ui->stacked->setCurrentWidget(startForm); ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::MAIN_PAGE; } void CasicBioRecWin::switchToUserListForm() { personListForm->findPersonList(); ui->stacked->setCurrentWidget(personListForm); ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::PERSON_LIST_FORM; } void CasicBioRecWin::switchToSettingForm() { ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::SETTING_FORM; } void CasicBioRecWin::switchToRegistForm(QString personId) { // 根据传递的参数更新页面标题 if (personId.isEmpty() == false) { addPersonForm->setPersonId(personId); addPersonForm->updateFormTitle("人员信息"); // 查询人员信息 addPersonForm->loadPersonInfo(personId); } else { addPersonForm->updateFormTitle("人员注册"); addPersonForm->clearPersonInfo(); addPersonForm->setPersonId(""); } // 切换页面 ui->stacked->setCurrentWidget(addPersonForm); ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::ADD_PERSON_FORM; } void CasicBioRecWin::switchToRecognizeForm() { ProMemory::getInstance().widgeFrame = CasicBioRecConst::WidgeFrameName::RECOGNIZE_RESULT_FORM; ui->stacked->setCurrentWidget(recogResultForm); recogResultForm->startWorkingRecognize(); } void CasicBioRecWin::initFormsPtr() { startForm = new StartupForm(this); personListForm = new PersonListForm(this); settingForm = new SettingForm(this); addPersonForm = new AddPersonForm(this); recogResultForm = new RecognizeResultForm(this); ui->stacked->addWidget(startForm); ui->stacked->addWidget(personListForm); ui->stacked->addWidget(settingForm); ui->stacked->addWidget(addPersonForm); ui->stacked->addWidget(recogResultForm); // 绑定按钮函数 connect(startForm, &StartupForm::switchToUserListForm, this, &CasicBioRecWin::switchToUserListForm); connect(startForm, &StartupForm::switchToSettingForm, this, &CasicBioRecWin::switchToSettingForm); connect(startForm, &StartupForm::startRecognize, this, &CasicBioRecWin::switchToRecognizeForm); connect(personListForm, &PersonListForm::switchToRegistForm, this, &CasicBioRecWin::switchToRegistForm); connect(personListForm, &PersonListForm::backToHomePage, this, &CasicBioRecWin::backToStandByForm); connect(addPersonForm, &AddPersonForm::switchToUserListForm, this, &CasicBioRecWin::switchToUserListForm); connect(addPersonForm, &AddPersonForm::backToHomePage, this, &CasicBioRecWin::backToStandByForm); } void CasicBioRecWin::initCacheData() { CacheManager::getInstance().updateDeptCache(); } void CasicBioRecWin::initFaceRegistThread() { // 人脸注册处理过程 ProMemory::getInstance().faceRegistPro = new FaceDetectRegistProcess(this); // 绑定信号与槽函数 // 采集人脸图像失败 connect(ProMemory::getInstance().faceRegistPro, &FaceDetectRegistProcess::failedCaptureFace, addPersonForm, &AddPersonForm::onFailedCaptureFace); // 采集人脸图像成功 connect(ProMemory::getInstance().faceRegistPro, &FaceDetectRegistProcess::successCaptureFace, addPersonForm, &AddPersonForm::onSuccessCaptureFace); ProMemory::getInstance().faceRegistPro->start(); } void CasicBioRecWin::initFaceRecogThread() { // 人脸识别处理过程 ProMemory::getInstance().faceRecogPro = new FaceDetectRecogProcess(this); // 绑定信号与槽函数 // 识别成功 connect(ProMemory::getInstance().faceRecogPro, &FaceDetectRecogProcess::matchSuccess, recogResultForm, &RecognizeResultForm::showRecognizeResult); // 识别失败 connect(ProMemory::getInstance().faceRecogPro, &FaceDetectRecogProcess::matchFailure, recogResultForm, &RecognizeResultForm::showRecogFailure); ProMemory::getInstance().faceRecogPro->start(); }