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

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

@ -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)

@ -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)

@ -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¼ÓÔØÊ§°Ü"));

@ -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:
lpMain(QObject *parent = nullptr);
~lpMain();
virtual QWidget *getMainWidget();
virtual void showWidget();
public:
lpMainWin m_wid;

@ -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") << ")";
}
}
}
}
@ -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();
}

@ -26,6 +26,7 @@
#include "QPLCDevice.h"
#include "lpSystemConfigUI.h"
#include "WebServer.h"
#include <QSystemTrayIcon>
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

Loading…
Cancel
Save