#ifndef RECOUIRECOGNIZE_H #define RECOUIRECOGNIZE_H #include #include #include #include #include #include #include "UiTools.h" #include #include #include "UiCommon.h" #include "UiConfig.h" #include "UiInterfaceForBackstage.h" class SceneMsgWidget : public QWidget { Q_OBJECT public: static const int DATE_TIME_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; SceneMsgWidget(QWidget *parent = nullptr); void setPersonNum(int source, int personNum); void setBgTransparent(bool set); int setType(int type); public slots: void slotNewDay(); private: DateTimeWidgetClassical *m_wgtDateTime = nullptr; QLabel *m_labelPersonNum = nullptr; int m_type = 0; }; typedef enum { GLOBAL_RECO_END_OK = 0, GLOBAL_RECO_END_NO, GLOBAL_RECO_FACE_CARD_NOT_MATCH, GLOBAL_RECO_SWIPE_CARD, GLOBAL_RECO_FACE_CAMERA, GLOBAL_RECO_NOT_PASS_TIME, GLOBAL_RECO_NEED_RECHECK, GLOBAL_RECO_PLATFORM_DISCONNECTED, GLOBAL_RECO_SWIPE_CARD_HERE, GLOBAL_RECO_HIDE_NAME_AREA, GLOBAL_RECO_NOT_LIVING, GLOBAL_RECO_UNAUTH_CARD, GLOBAL_RECO_PLS_TAP_ID_CARD, GLOBAL_RECO_PLS_CHECK_STATIC, GLOBAL_RECO_STATIC_ABNORMAL, GLOBAL_RECO_SWIPE_ID_OR_HEALEH_CODE, GLOBAL_RECO_CHECKING, GLOBAL_RECO_CHECK_FAILED, GLOBAL_RECO_QRCODE_OVERDUE, GLOBAL_RECO_NETWORK_ERROR, GLOBAL_RECO_PLATFORM_ERROR, GLOBAL_RECO_REQUEST_OVERTIME, GLOBAL_RECO_SWIPE_TRIP_CARD, GLOBAL_RECO_SHOW_HEALTH_CODE, GLOBAL_RECO_RESWIPE_TRIP_CARD, GLOBAL_RECO_SWIPE_ID_AND_TRIP_CARD, GLOBAL_RECO_TRIP_CARD_CHECKING, GLOBAL_RECO_SCAN_YUEJUMA, GLOBAL_RECO_SCAN_YUEJUMA_OR_SWIPE_ID, GLOBAL_RECO_PATROL_OK, GLOBAL_RECO_PATROL_NOT_RIGHT_TIME, GLOBAL_RECO_SHOW_QRCODE, GLOBAL_RECO_ID_FAILED, //身份证核验失败 GLOBAL_RECO_IN, //close to recognize GLOBAL_RECO_IN_SCANNER, GLOBAL_RECO_CHECK, //靠近重试 GLOBAL_RECO_BEGIN_AUTH, GLOBAL_RECO_TEMP_REQ, //请移动额头到测温区 GLOBAL_RECO_READ_TEMP_FAILED, //体温检测失败 GLOBAL_RECO_MASK_REQ, //请戴口罩 GLOBAL_RECO_MASK_OK, //口罩检测正常 GLOBAL_RECO_NO_ENTRY, //禁止通行 GLOBAL_RECO_CLEAR_NO_ENTRY, //清除禁止通行字样 GLOBAL_RECO_CLOSE_SCANLINE, //关闭扫描线 GLOBAL_RECO_SHOW_QRCODE_RECO, //显示识别二维码界面 GLOBAL_RECO_SHOW_FACE_RECO, //显示人脸识别界面,可能是从二维码界面切换过去的 GLOBAL_RECO_SHOW_NOTI_MSG, //显示通知信息 GLOBAL_RECO_SHOW_CENTER_MSG, //显示中央信息块 GLOBAL_RECO_SHOW_CENTER_MSG_BIG,//显示超大中央信息块 GLOBAL_RECO_SHOW_CENTER_MSG_BIG_RED, GLOBAL_RECO_SHOW_CENTER_MSG_BG_GREEN, GLOBAL_RECO_SHOW_CENTER_MSG_BG_YELLOW, GLOBAL_RECO_SHOW_CENTER_MSG_BG_RED, GLOBAL_RECO_SHOW_CENTER_MSG_BG_PURPLE, GLOBAL_RECO_SHOW_CENTER_MSG_BG_BLACK, GLOBAL_RECO_SHOW_CENTER_MSG_FIRE_ALARM, GLOBAL_RECO_TAKE_OFF_MASK, GLOBAL_RECO_OTHERS }GLOBAL_RECO_STATE; typedef enum { WIDGET_BG_COLOR_TRAN, WIDGET_BG_COLOR_BLUE, WIDGET_BG_COLOR_GREEN, WIDGET_BG_COLOR_RED }WIDGET_BG_COLOR_E; class TmprWidget : public QWidget { Q_OBJECT //多语言需要 public: static const QString TEMP_BG_GREEN_TOP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString TEMP_BG_RED_TOP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int TMPR_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int TMPR_FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; explicit TmprWidget(QWidget *parent = nullptr); ~TmprWidget(); void showNormalTemp(const QString& msg, float temp, bool isC); void showAbnormalTemp(const QString& msg, float temp, bool isHigh, bool isC); void setBackgroundColor(WIDGET_BG_COLOR_E color); private: QLabel* m_label_tem; //QLabel* m_label_msg; //记录当前显示温度,差值超分辨率0.1才刷新 float m_ForeheadTmpr; }; class MsgWidget : public QWidget { Q_OBJECT public: #define STYLE_QUANTITY 2 static const QString NO_NETWORK_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString NETWORK_CONNECTED_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString NETWORK_LOGGED_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString NET_ETH_IP_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString NET_WIFI_IP_RES_FILE[STYLE_QUANTITY][UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString NET_4G_IP_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_BLUE_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_GREEN_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_RED_BOM_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int TIME_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int MSG_WORD_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; //move to uiConfig if want to set font size for each language static const int NOTI_MSG_WORD_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; explicit MsgWidget(int timeType, int iconType, const QColor& textColor, QWidget *parent = nullptr); ~MsgWidget(); void setMsgTop(const QString&); void setMsgBtm(const QString&, const bool setRedColor = false); void setMsgNoti(const QString& msg, int color); void setLogo(const QString&, const bool scale = false); bool hasNoMsg(); void setNetworkStatus(const int); void setBackgroundColor(const WIDGET_BG_COLOR_E color); void updateIp(const QString& ip, int type = -1); void showDevInfo(const QString& devId, const QString& ver); void setStyle(int timeType, int iconType, const QColor& textColor); void showRecoUiDevIdAndVer(bool show); private: //QLabel* m_label_msgTop; QLabel* m_label_Icon; QLabel* m_label_msgBtm; QLabel* m_label_msgNoti; QLabel* m_label_time = nullptr; QLabel* m_label_networkStatus; QLabel* m_label_ip; QLabel* m_label_ipType; //eth wifi 4g TimerUpdate* _timerUpdate = nullptr; QLabel* m_labelDevId; QLabel* m_labelVer; int m_style = 0; }; class DetectResultWidget : public QWidget { Q_OBJECT public: typedef enum { BG_COLOR_BLUE, BG_COLOR_RED, BG_COLOR_TRAN, BG_COLOR_GREEN, BG_COLOR_YELLOW }BG_COLOR_E; static const int DETECT_RESULT_WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int DETECT_RESULT_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int MASK_LOGO_SIZE_7INCH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_BLUE_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_GREEN_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_RED_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int MASK_LOGO_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; explicit DetectResultWidget(QWidget *parent = nullptr); virtual ~DetectResultWidget(); void updateMsg(const QString& msg); protected: void showMsg(const QString& msg, int msgSize, BG_COLOR_E color, const QPixmap* icon = nullptr); QLabel* m_label_msg; private: QLabel* m_label_Icon; }; #if 1 class MaskWidget_o : public DetectResultWidget { Q_OBJECT public: explicit MaskWidget_o(QWidget *parent = nullptr); MaskWidget_o(); void setMaskMsg(bool maskOk, const QString& msg); void showQRCodeMsg(UiInterfaceForBackstage::QRCode_Msg_E); QString curMsg() const; private: bool m_lastMaskOk; QPixmap m_iconMaskOk; QPixmap m_iconMaskNull; }; class PersonWidget_o : public DetectResultWidget { Q_OBJECT public: explicit PersonWidget_o(QWidget *parent = nullptr); PersonWidget_o(); void setPersonMsg(RecoUiTextCfg::enTextType, const QString&, const BG_COLOR_E, const bool); bool allowToShow(); private: bool isShowingResultMsg; }; #endif class MaskWidget : public QWidget { Q_OBJECT public: explicit MaskWidget(QWidget *parent = nullptr); QStackedWidget* m_wgts; void setMaskMsg(bool maskOk, const QString& msg); void showQRCodeMsg(UiInterfaceForBackstage::QRCode_Msg_E); void hideSelf(); private: bool m_lastMaskOk; }; class PersonWidget : public QWidget { Q_OBJECT public: typedef enum { BG_COLOR_BLUE, BG_COLOR_RED, BG_COLOR_TRAN, BG_COLOR_GREEN, BG_COLOR_YELLOW }BG_COLOR_E; explicit PersonWidget(QWidget *parent = nullptr); QStackedWidget* m_wgts; void setPersonMsg(RecoUiTextCfg::enTextType, const QString&, const BG_COLOR_E, const bool); bool allowToShow(); private: bool isShowingResultMsg; }; class CenterMsgWidget : public QWidget { Q_OBJECT public: static const int WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int FONT_SIZE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString BG_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; explicit CenterMsgWidget(QWidget *parent = nullptr); virtual ~CenterMsgWidget(); void showMsg(const QString& msg, int type); protected: private: QLabel* m_label_msg; int m_centerMsgType = 0; void paintEvent(QPaintEvent *event); }; class FinalResultWidget : public QWidget { Q_OBJECT public: static const QString FINAL_RESULT_OK_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString FINAL_RESULT_FAIL_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int FINAL_RESULT_WIDGET_W_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; explicit FinalResultWidget(QWidget *parent = nullptr); virtual ~FinalResultWidget(); void showResult(bool pass); protected: private: }; class recoUiRecognize : public PageAcceptMouseAndTouch { Q_OBJECT public: static const QString BG_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int MSG_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString SCANLINE_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString LOGO_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString TEMP_CALIBOX_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString DARK_FILL_LIGHT_RES_FILE[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString PWD_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString PWD_BTN_PRESSED[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int PWD_BTN_W_H[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int SWIP_CARD_WIDGET_WIDTH[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const int SWIP_CARD_WIDGET_HEIGHT[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString SWIP_CARD_DAY_MODE_WIDGET_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString SWIP_CARD_NIGHT_MODE_WIDGET_BG[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; static const QString CALL_BTN[UiConfig::SUPPORT_SCREEN_SIZE_QUANTITY]; //扫描线运行一次时间,时间越短,运行越快 static const int SCAN_LINE_RUN_TIME = 800; static constexpr float SCAN_LINE_START_POS_SCALE = 0.2f; static constexpr float SCAN_LINE_RUN_DISTANCE_SCALE = 0.55f; static const int SCAN_LINE_LOOP_INTERVAL = 500; static const int clickNum = UiConfig::MOUSE_CLICK_TIMES_TO_SETTING; static const int clickGrap = UiConfig::MOUSE_CLICK_INTERVAL_MAX; static const int QRCODE_SCAN_LINE_RUN_TIME = 1000; static const int QRCODE_SCAN_LINE_RUN_INTERVAL_TIME = QRCODE_SCAN_LINE_RUN_TIME + 200; static const int QRCODE_FAILED_MSG_DISPLAY_TIME = 2000; //ms static constexpr float HIGH_TEMP_VALUE = 42.0f; static constexpr float LOW_TEMP_VALUE = 35.0f; typedef enum { MSG_BG_COLOR_BOM_NULL, MSG_BG_COLOR_BOM_BLUE, MSG_BG_COLOR_BOM_GREEN, MSG_BG_COLOR_BOM_TOP_GREEN, MSG_BG_COLOR_BOM_RED, MSG_BG_COLOR_BOM_TOP_RED, MSG_BG_COLOR_QRCODE }MSG_BG_COLOR_E; typedef enum { SCAN_LINE_SWITCH_OFF, SCAN_LINE_SWITCH_BLUE, SCAN_LINE_SWITCH_RED }SCAN_LINE_SWITCH_E; public: explicit recoUiRecognize(bool isNightMode, bool hasPwdBtn, bool hasCallBtn, QWidget *parent = nullptr); ~recoUiRecognize(); void setBackstageUiinterface(BackstageInterfaceForUi* interface); void timerEvent(QTimerEvent *event); int setScannerState(const SCAN_LINE_SWITCH_E); void showRecoScanner(); void showRecoFail(GLOBAL_RECO_STATE failType); void showRecoIDFail(); void showRetry(); void showNoMaskWarn(); //请戴口罩 void showMaskOk(); void showMaskWarn(); void showNoEntry(); void clearNoEntry(); void setPwdButton(bool visible); int setCamVideoWind(); void setStyle(int style); void setSceneUiReco(bool toReco); void setTicketCheckCount(int source, int count); void setScenePersonCountType(int type); signals: void signalChangePage(); void signalShowPwdPage(const QString& name); void signalScreenTouch(); void callDialButtonClicked(); // 呼叫设备按钮 void callPlatformButtonClicked(const QString &name); // 呼叫管理处 public slots: void slotsNoSuccessPage(const int nPage); void slotsSuccessPage(const int nPage, const QString& name); void slotsDrawScanner(const int nPage, const bool faceAvailable); void handleRecoResShowTime(); void slotsInteractionChange(const INTERACION_OPTION& interaction, int nSelectRes); void slotShowNormalTemp(const float temp, const bool isC); void slotShowAbnormalTemp(const float temp, const bool isHigh, const bool isC); void slotUpdateLogo(const int); void slotUpdatePlatformConnectionStatus(const int); void slotsResetRecoUi(); void slotShowQRCodeMsg(const int); void slotChangeRecoUiMode(); //二维码开关时更新识别页面,人脸识别模式/二维码扫描模式 void slotTimerQRCodeScanline(); void slotQRCodeSwitchToStandbyStatusFromOvertimeStatus(); void slotUpdateRecoUiIpDisplay(const bool); //增加识别界面ip显示开关,更新信号 void slotShowFeatureUpdateProgress(const unsigned current, const unsigned all); void slotCloseFeatureUpdateProgress(); void slotShowRecoUiMask(int maskType); void slotNotiMsg(const int nPage, const QString& msg, int color); void slotLongPressShowSetting(); void slotCenterMsg(const int nPage, const QString& msg); void slotPwdBtnClicked(); void slotSetUserPwdButton(bool visible); void slotShowOrHideFaceFrame(bool show); void slotShowFinalResult(bool pass); void slotShowHealthCodeAuthStatus(int status); void slotShowCallBtn(bool show); void slotShowRecoUiDevIdAndVer(bool show); private: void closeRecoResTime(); private: QLabel* m_label_back; QWidget* m_wgtCardUnderScreen; TmprWidget* m_widget_tmpr; MaskWidget* m_widget_mask; CenterMsgWidget* m_widget_cMsg; PersonWidget* m_widget_person; MsgWidget* m_widget_msg; QLabel* _moveScanner; QPropertyAnimation* _ScanCurorAnimation; SCAN_LINE_SWITCH_E m_currentScanLine; int m_clickCount; QTime _preTime; bool isTouched; int _timerId; //扫描动画定时器 QTimer* _pShowResTimer; QString m_name; MSG_BG_COLOR_E m_currentBackColor; //当前背景颜色,用于显示“禁止通行”时决定字样的颜色 int m_tempRefresh; //温度刷新标志 int m_maskRefresh; //口罩刷新标志 int m_personRefresh; //人员信息刷新标志 int m_NotiMsgRefresh; //通知信息刷新标志 int m_NoEntryRefresh; //通行结果刷新标志 bool m_msgShowed; //是否有前面4个信息在显示中 bool m_faceAivaliable; //当前画面是否存在人脸 int m_showGreenColor; int m_showRedColor; int m_scanLineInterval; bool runScanLine; //扫描线开关状态 int m_scanLinePos; bool timerTimeoutOperation; //定时器超时后动作类型,就是超时时做什么事 QTimer* m_timer_QRCodeScanLine; QLabel* m_label_QRCodeScanLine; QPropertyAnimation* m_QRCodeAnimation; QTimer* m_QRCodeTimer; ProgressWidget* m_widget_progress; QString m_notimsg; int m_notiMsgColor; QWidget* m_btnPwd; bool m_showFaceFrameByUser = false; bool m_isNightMode = false; FinalResultWidget* m_resWgt; QLabel* m_healthCodeAuthstatus; QPixmap m_bgPm; QPixmap m_bgSceneIdle; SceneMsgWidget* m_wgtSceneMsg = nullptr; RoundedWidget* m_wgtCallDialDev; RoundedWidget* m_wgtCallMngCenter; bool eventFilter(QObject *watched, QEvent *event); void setBackgroundColor(const MSG_BG_COLOR_E index); void runQRCodeScanLine(); void showQRCodeReco(); void showFaceReco(); bool showPersonWidgetMsg(); bool showNoEntryMsg(); bool showNotiMsg(); bool showTempMsg(); bool showMaskMsg(); bool event(QEvent *event); bool multiPressToSettingPage(); bool longPressToSettingPage(); QString recoUiTextCfg(RecoUiTextCfg::enTextType type); bool showCenterMsg(const QString& msg, int type); void setCardReaderUnderScreenInstructions(bool isNightMode); }; #endif // RECOUIRECOGNIZE_H