Newer
Older
CasicIrisIdentify / MainWindowForm.cpp
#ifdef _MSC_VER
#pragma execution_character_set("utf-8")    // Qt VS 中文兼容(UTF-8)
#endif

#include "MainWindowForm.h"
#include "ui_MainWindowForm.h"

MainWindowForm::MainWindowForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWindowForm)
{
    ui->setupUi(this);

    // 设置窗口透明和大小、位置
    this->setWindowFlags(Qt::FramelessWindowHint);
    this->move(1400, 15);
    this->resize(SettingConfig::getInstance().WINDOW_WIDTH, SettingConfig::getInstance().WINDOW_HEIGHT);

    // 通过调色板的颜色来设置窗口的统一背景色
    qApp->setPalette(QPalette(QColor(SettingConfig::getInstance().WINDOW_BACKGROUND_COLOR)));

    // 加载css文件设置控件样式
    QFile file(QApplication::applicationDirPath() + "/qss/main.css");
    if (file.open(QFile::ReadOnly))
    {
        QString qssStr = QLatin1String(file.readAll());
        this->setStyleSheet(qssStr);
        file.close();
    }

    initFormsPtr();

    initIrisRecogThread(); // 虹膜识别线程

    // 设置标题文字
    ui->labelTitle->setText(SettingConfig::getInstance().WINDOW_TITLE);
    ui->labelCopyright->setText(SettingConfig::getInstance().WINDOW_RIGHTS);
    ui->labelVersion->setText(SettingConfig::getInstance().WINDOW_VERSION);

    ui->labelDate->setText(QDate::currentDate().toString("yyyy-MM-dd  dddd"));

    // 初始化更新界面的定时器
    // 每秒执行一次
    connect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, this, &MainWindowForm::updateBannerTime);
    TimeCounterUtil::getInstance().clockCounter->start(1000);

    // 初始化虹膜相机控制
    ProMemory::getInstance().irisCam = new IrisCameraController(this);
    ProMemory::getInstance().irisCam->initIrisCamera();
    ProMemory::getInstance().irisCam->openIrisCamera();
    connect(ProMemory::getInstance().irisCam->irisCamHandler, &IrisCameraCapEventHandler::sendIrisFrameToDraw, identifyForm, &IdentifyForm::drawIrisImageOnFrame);

//    LOG_INFO(QString("应用程序启动成功[Application Startup Success]").toStdString());
    qDebug() << QString("应用程序启动成功[Application Startup Success]");
    ProMemory::getInstance().widgeFrame = AppConstants::WidgeFrameName::IDENTIFY_FORM;
    ui->wdgtStatced->setCurrentWidget(identifyForm);

    // 开始虹膜相机拍图
    ProMemory::getInstance().irisCam->startCapture();

    // 识别线程开始工作
    ProMemory::getInstance().irisRecogPro->setWorking(true);
}

MainWindowForm::~MainWindowForm()
{
    ProMemory::getInstance().irisRecogPro->setWorking(false);
    ProMemory::getInstance().irisRecogPro->exitThread();
    ProMemory::getInstance().irisRecogPro->deleteLater();
    ProMemory::getInstance().irisRecogPro->wait();

    delete ui;
    delete ProMemory::getInstance().irisRecogPro;
}

void MainWindowForm::lockScreen()
{
    ui->wdgtStatced->setCurrentWidget(lockScreenForm);
    ProMemory::getInstance().widgeFrame = AppConstants::WidgeFrameName::LOCKSCREEN_FORM;
    ProMemory::getInstance().appState = AppConstants::ApplicationState::STATE_WAIT;
}

void MainWindowForm::keyPressEvent(QKeyEvent *event)
{
    switch (event->key()) {
    case Qt::Key_Escape:
        QTimer::singleShot(100, qApp, [=](){
            QApplication::quit();
        });

    default:
        QWidget::keyPressEvent(event);
    }
}

void MainWindowForm::initFormsPtr()
{
    // 初始化各个form
    lockScreenForm = new LockScreenForm(this);
    identifyForm = new IdentifyForm(this);

    // 将form添加到statcked widget中
    ui->wdgtStatced->addWidget(identifyForm);
    ui->wdgtStatced->addWidget(lockScreenForm);

    // 绑定按钮函数
}

void MainWindowForm::initIrisRecogThread()
{
    // 虹膜识别处理过程
    ProMemory::getInstance().irisRecogPro = new IrisRecogProcess(this);

    // 绑定信号与槽函数
    // 识别成功
    connect(ProMemory::getInstance().irisRecogPro, &IrisRecogProcess::findMatchedIris, identifyForm, &IdentifyForm::showRecognizeResult);

    // 识别失败
    connect(ProMemory::getInstance().irisRecogPro, &IrisRecogProcess::failedMatchedIris, identifyForm, &IdentifyForm::showRecogFailure);

    ProMemory::getInstance().irisRecogPro->start();
}

void MainWindowForm::updateBannerTime()
{
    QDateTime now = QDateTime::currentDateTime();
    ui->labelTitle->setText(now.toString("HH:mm:ss"));

    if (now.toString("HH:mm:ss") == "00:00:00") {
        ui->labelDate->setText(now.toString("yyyy-MM-dd  dddd"));
    }
}