加入后台图标和后台运行功能

master
bob.pan 5 years ago
parent aed863f983
commit 7e2e4e23c7

@ -17,7 +17,7 @@ class IMainWidget : public QObject
public: public:
IMainWidget(QObject *parent = nullptr) {}; IMainWidget(QObject *parent = nullptr) {};
~IMainWidget() {}; ~IMainWidget() {};
virtual QWidget* getMainWidget() = 0; virtual void showWidget() = 0;
}; };
#define IMAINWIDGET_API extern "C" __declspec(dllexport) #define IMAINWIDGET_API extern "C" __declspec(dllexport)

@ -10,7 +10,7 @@ class IMainWidget : public QObject
public: public:
IMainWidget(QObject *parent = nullptr) {}; IMainWidget(QObject *parent = nullptr) {};
~IMainWidget() {}; ~IMainWidget() {};
virtual QWidget* getMainWidget() = 0; virtual void showWidget() = 0;
}; };
#define IMAINWIDGET_API extern "C" __declspec(dllexport) #define IMAINWIDGET_API extern "C" __declspec(dllexport)

@ -20,13 +20,12 @@ int main(int argc, char *argv[])
{ {
pMain = func(); pMain = func();
if (pMain) { if (pMain) {
pMainWid = pMain->getMainWidget(); pMain->showWidget();
a.exec();
} }
else {
QMessageBox::information(0, "", QObject::tr("lpMain¼ÓÔØÊ§°Ü"));
} }
if (pMainWid)
{
pMainWid->show();
a.exec();
} }
else { else {
QMessageBox::information(0, "", QObject::tr("lpMain¼ÓÔØÊ§°Ü")); QMessageBox::information(0, "", QObject::tr("lpMain¼ÓÔØÊ§°Ü"));

@ -23,7 +23,8 @@ lpMain::~lpMain()
} }
QWidget * lpMain::getMainWidget() void lpMain::showWidget()
{ {
return &m_wid; m_wid.showWidget();
} }

@ -9,7 +9,7 @@ class lpMain :public IMainWidget
public: public:
lpMain(QObject *parent = nullptr); lpMain(QObject *parent = nullptr);
~lpMain(); ~lpMain();
virtual QWidget *getMainWidget(); virtual void showWidget();
public: public:
lpMainWin m_wid; lpMainWin m_wid;

@ -94,6 +94,7 @@ lpMainWin::lpMainWin(QWidget *parent)
onInitEngineCtrl(); onInitEngineCtrl();
ui.setupUi(this); ui.setupUi(this);
onInitAbout(); onInitAbout();
setupTrayIcon();
lpGlobalConfig::instance()->loadStandParam(); 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) Q_SLOT void lpMainWin::onLogInOut(QString strName, int level, int state)
{ {
lpGlobalData::instance()->m_curUser = strName; lpGlobalData::instance()->m_curUser = strName;
@ -1068,7 +1081,12 @@ void lpMainWin::timerEvent(QTimerEvent *event)
void lpMainWin::closeEvent(QCloseEvent *event) void lpMainWin::closeEvent(QCloseEvent *event)
{ {
if (m_bExit == false)
{
setMainWindowVisibility(false);
return event->ignore();
}
return event->accept();
} }
void lpMainWin::onSetModel() void lpMainWin::onSetModel()
@ -1181,22 +1199,8 @@ Q_SLOT void lpMainWin::onReadDetectStateASK()
Q_SLOT void lpMainWin::onTrigRecv(int m_value) Q_SLOT void lpMainWin::onTrigRecv(int m_value)
{ {
/*用于接收PLC触发相机的信号 自检是否收到图像 */ /*用于接收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 (lpGlobalConfig::instance()->IsDetect == true) {
// if (m_exposureTimeCount != 0)
// {
// m_pCoreCtrl->ISetExposureTime(m_camKey, m_exposureTimeArray[m_exposureTimeCount]);
// }
onTriggerCam(); onTriggerCam();
qWarning() << "soft ctrol camera :" << "(" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ")";
}
}
} }
} }
@ -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)); m_pWebSocket->sendData(Json2byte(sAlgRltObj));
} }
} }
QJsonObject lpMainWin::byte2Json(QByteArray data) QJsonObject lpMainWin::byte2Json(QByteArray data)
@ -1715,3 +1722,56 @@ QByteArray lpMainWin::Json2byte(QJsonObject obj)
return doc.toJson(); 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();
}

@ -26,6 +26,7 @@
#include "QPLCDevice.h" #include "QPLCDevice.h"
#include "lpSystemConfigUI.h" #include "lpSystemConfigUI.h"
#include "WebServer.h" #include "WebServer.h"
#include <QSystemTrayIcon>
class lpMainWin : public QMainWindow class lpMainWin : public QMainWindow
{ {
@ -43,6 +44,7 @@ public:
QVariant IGetVariantById(int id); QVariant IGetVariantById(int id);
void IEngineResult(QVariantMap vmap); void IEngineResult(QVariantMap vmap);
void showWidget();
signals: signals:
void sgTaskSendModels(int nIndex, QString strModel, double dDiameter, double dHeight); void sgTaskSendModels(int nIndex, QString strModel, double dDiameter, double dHeight);
void sgTskSendDetectState(int nIndex, QString strModel, int IsDetect); void sgTskSendDetectState(int nIndex, QString strModel, int IsDetect);
@ -114,6 +116,13 @@ protected:
void sendWebAlgRlt(const ValueResult& rlt); void sendWebAlgRlt(const ValueResult& rlt);
QJsonObject byte2Json(QByteArray data); QJsonObject byte2Json(QByteArray data);
QByteArray Json2byte(QJsonObject obj); QByteArray Json2byte(QJsonObject obj);
void setupTrayIcon();
Q_SLOT void onActivated(QSystemTrayIcon::ActivationReason reason);
void setMainWindowVisibility(bool state);
Q_SLOT void onQuitApplication();
private: private:
void onShowResult(Result2Ui* pRlt);//展示识别结果 void onShowResult(Result2Ui* pRlt);//展示识别结果
void saveValveImage(QImage image, QString strName = "NG"); void saveValveImage(QImage image, QString strName = "NG");
@ -140,6 +149,13 @@ private:
class QLabel* m_pLbCurrentTime{ nullptr };//显示系统时间 class QLabel* m_pLbCurrentTime{ nullptr };//显示系统时间
class QLabel* m_pLbDetectState{ nullptr };//显示检测状态 class QLabel* m_pLbDetectState{ nullptr };//显示检测状态
class QLabel *m_pLbUser{ 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: private:
CDllCoreCtrl* m_pDllCoreCtrl{ nullptr }; CDllCoreCtrl* m_pDllCoreCtrl{ nullptr };
ICoreCtrl* m_pCoreCtrl{ nullptr }; ICoreCtrl* m_pCoreCtrl{ nullptr };
@ -193,6 +209,9 @@ private:
private: private:
WebServer *m_pWebSocket{ nullptr }; WebServer *m_pWebSocket{ nullptr };
private:
int m_showMode{ 0 };// 0 隐藏UI 1显示UI
}; };
#endif #endif

Loading…
Cancel
Save