#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(); } // 初始化虹膜库 ProMemory::getInstance().initIrisFeatures(); // 初始化各个界面的form initFormsPtr(); // 设置标题文字 ui->labelCopyright->setText(SettingConfig::getInstance().WINDOW_RIGHTS); ui->labelVersion->setText(SettingConfig::getInstance().WINDOW_VERSION); ui->labelMainTime->setText(QTime::currentTime().toString("HH:mm:ss")); ui->labelMainDate->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; // 启动后显示视频画面 ProMemory::getInstance().appState = AppConstants::ApplicationState::STATE_WORKING; // 启动后处于工作状态 ui->wdgtStatced->setCurrentWidget(identifyForm); // 开始虹膜相机拍图 ProMemory::getInstance().irisCam->startCapture(); // 识别线程开始工作 initIrisRecogThread(); // 虹膜识别线程 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::lockScreenHandler() { ui->wdgtStatced->setCurrentWidget(lockScreenForm); ProMemory::getInstance().widgeFrame = AppConstants::WidgeFrameName::LOCKSCREEN_FORM; ProMemory::getInstance().appState = AppConstants::ApplicationState::STATE_WAIT; // App状态 = 待机 TimeCounterUtil::getInstance().irisCapCounter->setInterval(SettingConfig::getInstance().LOCK_FRAME_INTERVAL); ui->labelMainTime->hide(); ui->labelMainDate->hide(); // 重新绑定每秒的定时信号和槽函数 disconnect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, this, &MainWindowForm::updateBannerTime); connect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, lockScreenForm, &LockScreenForm::showLockScreenTime); } void MainWindowForm::startIdentifyHandler() { ui->wdgtStatced->setCurrentWidget(identifyForm); ProMemory::getInstance().widgeFrame = AppConstants::WidgeFrameName::IDENTIFY_FORM; ProMemory::getInstance().appState = AppConstants::ApplicationState::STATE_IDENTIFYING; // App状态 = 识别中 identifyForm->updateIdentifyTips("识 别 中"); TimeCounterUtil::getInstance().irisCapCounter->setInterval(SettingConfig::getInstance().IRIS_FRAME_INTERVAL); ui->labelMainTime->show(); ui->labelMainDate->show(); // 重新绑定每秒的定时信号和槽函数 disconnect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, lockScreenForm, &LockScreenForm::showLockScreenTime); connect(TimeCounterUtil::getInstance().clockCounter, &QTimer::timeout, this, &MainWindowForm::updateBannerTime); } 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); // 找到眼睛 开始识别 connect(ProMemory::getInstance().irisRecogPro, &IrisRecogProcess::startIdentifyIris, this, &MainWindowForm::startIdentifyHandler); // 持续没找到目标 待机 connect(ProMemory::getInstance().irisRecogPro, &IrisRecogProcess::backToLockScreen, this, &MainWindowForm::lockScreenHandler); ProMemory::getInstance().irisRecogPro->start(); } void MainWindowForm::updateBannerTime() { QDateTime now = QDateTime::currentDateTime(); if (ProMemory::getInstance().widgeFrame == AppConstants::WidgeFrameName::IDENTIFY_FORM) { ui->labelMainTime->setText(now.toString("HH:mm:ss")); if (now.toString("HH:mm:ss") == "00:00:00") { ui->labelMainDate->setText(now.toString("yyyy-MM-dd dddd")); } } }