From 7e2e4e23c7d30c690da2fb3ff9446124171b06c5 Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Mon, 6 Sep 2021 17:38:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=90=8E=E5=8F=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E5=92=8C=E5=90=8E=E5=8F=B0=E8=BF=90=E8=A1=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3part/lpCoreCtrl/include/IMainWidget.h | 2 +- tpvs17/Enchanter/IMainWidget.h | 2 +- tpvs17/Enchanter/main.cpp | 11 ++- tpvs17/tpMain/lpMain.cpp | 5 +- tpvs17/tpMain/lpMain.h | 2 +- tpvs17/tpMain/lpMainWin.cpp | 96 +++++++++++++++++++++----- tpvs17/tpMain/lpMainWin.h | 19 +++++ 7 files changed, 108 insertions(+), 29 deletions(-) diff --git a/3part/lpCoreCtrl/include/IMainWidget.h b/3part/lpCoreCtrl/include/IMainWidget.h index cbc0cc9..1787093 100644 --- a/3part/lpCoreCtrl/include/IMainWidget.h +++ b/3part/lpCoreCtrl/include/IMainWidget.h @@ -17,7 +17,7 @@ class IMainWidget : public QObject public: IMainWidget(QObject *parent = nullptr) {}; ~IMainWidget() {}; - virtual QWidget* getMainWidget() = 0; + virtual void showWidget() = 0; }; #define IMAINWIDGET_API extern "C" __declspec(dllexport) diff --git a/tpvs17/Enchanter/IMainWidget.h b/tpvs17/Enchanter/IMainWidget.h index f68415a..70d5368 100644 --- a/tpvs17/Enchanter/IMainWidget.h +++ b/tpvs17/Enchanter/IMainWidget.h @@ -10,7 +10,7 @@ class IMainWidget : public QObject public: IMainWidget(QObject *parent = nullptr) {}; ~IMainWidget() {}; - virtual QWidget* getMainWidget() = 0; + virtual void showWidget() = 0; }; #define IMAINWIDGET_API extern "C" __declspec(dllexport) diff --git a/tpvs17/Enchanter/main.cpp b/tpvs17/Enchanter/main.cpp index 0f5f784..8e40f53 100644 --- a/tpvs17/Enchanter/main.cpp +++ b/tpvs17/Enchanter/main.cpp @@ -20,13 +20,12 @@ int main(int argc, char *argv[]) { pMain = func(); if (pMain) { - pMainWid = pMain->getMainWidget(); + pMain->showWidget(); + a.exec(); + } + else { + QMessageBox::information(0, "", QObject::tr("lpMainʧ")); } - } - if (pMainWid) - { - pMainWid->show(); - a.exec(); } else { QMessageBox::information(0, "", QObject::tr("lpMainʧ")); diff --git a/tpvs17/tpMain/lpMain.cpp b/tpvs17/tpMain/lpMain.cpp index bca9d9b..e280a31 100644 --- a/tpvs17/tpMain/lpMain.cpp +++ b/tpvs17/tpMain/lpMain.cpp @@ -23,7 +23,8 @@ lpMain::~lpMain() } -QWidget * lpMain::getMainWidget() +void lpMain::showWidget() { - return &m_wid; + m_wid.showWidget(); } + diff --git a/tpvs17/tpMain/lpMain.h b/tpvs17/tpMain/lpMain.h index 1e2fd1d..f94147c 100644 --- a/tpvs17/tpMain/lpMain.h +++ b/tpvs17/tpMain/lpMain.h @@ -9,7 +9,7 @@ class lpMain :public IMainWidget public: lpMain(QObject *parent = nullptr); ~lpMain(); - virtual QWidget *getMainWidget(); + virtual void showWidget(); public: lpMainWin m_wid; diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index 5fda8d3..6d3fe60 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -94,6 +94,7 @@ lpMainWin::lpMainWin(QWidget *parent) onInitEngineCtrl(); ui.setupUi(this); onInitAbout(); + setupTrayIcon(); lpGlobalConfig::instance()->loadStandParam(); { @@ -813,6 +814,18 @@ void lpMainWin::IEngineResult(QVariantMap vMap) /*展示结果*/ } +void lpMainWin::showWidget() +{ + if (m_showMode == 1) + { + setMainWindowVisibility(true); + } + else { + setMainWindowVisibility(false); + } + +} + Q_SLOT void lpMainWin::onLogInOut(QString strName, int level, int state) { lpGlobalData::instance()->m_curUser = strName; @@ -1068,7 +1081,12 @@ void lpMainWin::timerEvent(QTimerEvent *event) void lpMainWin::closeEvent(QCloseEvent *event) { - + if (m_bExit == false) + { + setMainWindowVisibility(false); + return event->ignore(); + } + return event->accept(); } void lpMainWin::onSetModel() @@ -1181,22 +1199,8 @@ Q_SLOT void lpMainWin::onReadDetectStateASK() Q_SLOT void lpMainWin::onTrigRecv(int m_value) { /*用于接收PLC触发相机的信号 自检是否收到图像 */ - qDebug() << "recv a camera trig :" << QString::number(m_value); - qWarning() << "recv a Triger signal from PLC:" << "(" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ")"; - //if (m_pState)//如果是使用软件触发相机拍照 - { - //if (DetectState::instance()->m_CameraTrigeType == 0)//软件触发模式 - { - if (lpGlobalConfig::instance()->IsDetect == true) { -// if (m_exposureTimeCount != 0) -// { -// m_pCoreCtrl->ISetExposureTime(m_camKey, m_exposureTimeArray[m_exposureTimeCount]); -// } - - onTriggerCam(); - qWarning() << "soft ctrol camera :" << "(" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ")"; - } - } + if (lpGlobalConfig::instance()->IsDetect == true) { + onTriggerCam(); } } @@ -1663,6 +1667,10 @@ Q_SLOT void lpMainWin::onWebSocketRecvData(QWebSocket* p, QByteArray data) { } + else if (strcmd == "showWidget") + { + this->show(); + } } } @@ -1700,7 +1708,6 @@ void lpMainWin::sendWebAlgRlt(const ValueResult& rlt) { m_pWebSocket->sendData(Json2byte(sAlgRltObj)); } - } QJsonObject lpMainWin::byte2Json(QByteArray data) @@ -1715,3 +1722,56 @@ QByteArray lpMainWin::Json2byte(QJsonObject obj) return doc.toJson(); } +void lpMainWin::setupTrayIcon() +{ + m_trayIcon = new QSystemTrayIcon(this); + m_trayIconMenu = new QMenu(this); + m_restoreAction = new QAction(tr("后台运行"), this); + m_quitAction = new QAction(tr("退出"), this); + + m_trayIconMenu->addAction(m_restoreAction); + m_trayIconMenu->addSeparator(); + m_trayIconMenu->addAction(m_quitAction); + + QIcon icon(":/image/leaper"); + m_trayIcon->setIcon(icon); + m_trayIcon->setContextMenu(m_trayIconMenu); + m_trayIcon->show(); + + connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onActivated(QSystemTrayIcon::ActivationReason))); + connect(m_restoreAction, &QAction::triggered, this, [this]() { + setMainWindowVisibility(isHidden() + || windowState() == Qt::WindowMinimized + || (qApp->applicationState() == Qt::ApplicationInactive)); + }); + connect(m_quitAction, &QAction::triggered, this, &lpMainWin::onQuitApplication); +} + +Q_SLOT void lpMainWin::onActivated(QSystemTrayIcon::ActivationReason reason) +{ + if (reason == QSystemTrayIcon::DoubleClick) + { + setMainWindowVisibility(true); + } +} + +void lpMainWin::setMainWindowVisibility(bool state) +{ + if (state) { + show(); + qApp->processEvents(); + qApp->setActiveWindow(this); + qApp->processEvents(); + m_restoreAction->setText(tr("后台运行")); + } + else { + m_restoreAction->setText(tr("显示界面")); + hide(); + } +} + +Q_SLOT void lpMainWin::onQuitApplication() +{ + m_bExit = true; + lpMainWin::close(); +} diff --git a/tpvs17/tpMain/lpMainWin.h b/tpvs17/tpMain/lpMainWin.h index 4db6113..f3f75a5 100644 --- a/tpvs17/tpMain/lpMainWin.h +++ b/tpvs17/tpMain/lpMainWin.h @@ -26,6 +26,7 @@ #include "QPLCDevice.h" #include "lpSystemConfigUI.h" #include "WebServer.h" +#include class lpMainWin : public QMainWindow { @@ -43,6 +44,7 @@ public: QVariant IGetVariantById(int id); void IEngineResult(QVariantMap vmap); + void showWidget(); signals: void sgTaskSendModels(int nIndex, QString strModel, double dDiameter, double dHeight); void sgTskSendDetectState(int nIndex, QString strModel, int IsDetect); @@ -114,6 +116,13 @@ protected: void sendWebAlgRlt(const ValueResult& rlt); QJsonObject byte2Json(QByteArray data); QByteArray Json2byte(QJsonObject obj); + + + void setupTrayIcon(); + Q_SLOT void onActivated(QSystemTrayIcon::ActivationReason reason); + void setMainWindowVisibility(bool state); + Q_SLOT void onQuitApplication(); + private: void onShowResult(Result2Ui* pRlt);//展示识别结果 void saveValveImage(QImage image, QString strName = "NG"); @@ -140,6 +149,13 @@ private: class QLabel* m_pLbCurrentTime{ nullptr };//显示系统时间 class QLabel* m_pLbDetectState{ nullptr };//显示检测状态 class QLabel *m_pLbUser{ nullptr };//显示登陆用户信息 + + QSystemTrayIcon* m_trayIcon{ nullptr }; + QMenu* m_trayIconMenu{ nullptr }; + QAction* m_restoreAction{ nullptr }; + QAction* m_quitAction{ nullptr }; + bool m_bExit{ false }; + private: CDllCoreCtrl* m_pDllCoreCtrl{ nullptr }; ICoreCtrl* m_pCoreCtrl{ nullptr }; @@ -193,6 +209,9 @@ private: private: WebServer *m_pWebSocket{ nullptr }; + +private: + int m_showMode{ 0 };// 0 隐藏UI 1显示UI }; #endif