Files
handleaiuinew/HanddleAI/HandleAiUi-new/main.cpp
T

197 lines
8.1 KiB
C++
Raw Normal View History

2024-05-18 23:53:26 +08:00
#include "mainwindow.h"
#include <QApplication>
#include <QSystemSemaphore>
#include <QSharedMemory>
#include <QMessageLogger>//日志
#include <QDebug>
#include <qmessagebox.h>
#include <qpushbutton.h>
#include <qlineedit.h>
2024-08-07 09:16:35 +00:00
#include <qlabel.h>
2024-05-18 23:53:26 +08:00
#include <qcombobox.h>
#include <QMetaType>
#include <globalStruct.h>
2024-08-07 09:16:35 +00:00
#include <back/manualDetThread.h>
#include <uiModule/uiModule_imageDoubleCheckQdialog.h>
2024-05-23 15:06:03 +08:00
2024-08-07 09:16:35 +00:00
#include <appCore.hpp>
#include <detProcess.hpp>
2024-08-21 11:33:05 +08:00
#include <opencv2/core/utils/logger.hpp>
2024-08-07 09:16:35 +00:00
#pragma region 程序启动功能
bool appIsRuning()
2024-05-18 23:53:26 +08:00
{
QSystemSemaphore sema("monkey", 1, QSystemSemaphore::Open);
sema.acquire();
QSharedMemory mem("DetUi");
if (mem.create(1) == false)
{
sema.release();
2024-08-07 09:16:35 +00:00
return false;
2024-05-18 23:53:26 +08:00
}
2024-05-19 15:43:10 +08:00
sema.release();
2024-08-07 09:16:35 +00:00
return true;
}
bool isRunAsAdmin()
{
BOOL fIsRunAsAdmin = FALSE;
PSID pAdministratorsGroup = NULL;
// Allocate and initialize a SID of the administrators group.
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
if (!AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, &pAdministratorsGroup))
{
return false;
}
// Determine whether the SID of administrators group is enabled in the primary access token of the process.
if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))
{
fIsRunAsAdmin = FALSE;
}
// Free the allocated SID.
if (pAdministratorsGroup)
{
FreeSid(pAdministratorsGroup);
}
return fIsRunAsAdmin;
}
void restartAsAdmin()
{
TCHAR szPath[MAX_PATH];
if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))
{
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.lpVerb = TEXT("runas");
sei.lpFile = szPath;
sei.hwnd = NULL;
sei.nShow = SW_NORMAL;
if (!ShellExecuteEx(&sei))
{
DWORD dwError = GetLastError();
if (dwError == ERROR_CANCELLED)
{
//std::cout << "The user refused to allow privileges elevation.\n";
}
}
}
}
#pragma endregion
void connectSignalAndSlots(MainWindow* front, appCore* _core, detProcess* _detProcess)
{
//LOG
QObject::connect(&_core->_logService._logToQtWidget, &logToQtWidget::stdLogSignal,
front->_logWidget, &logWidget::recvStdLogMsg);
QObject::connect(&_core->_logService._logToQtWidget, &logToQtWidget::qtLogSignal,
front->_logWidget, &logWidget::recvQtLogMsg);
QObject::connect(&_core->_logService._logToQtWidget, &logToQtWidget::mainWindowStdLogSignal,
front->_displayWidget, &displayWidget::recvMainWindowStdLogMsg);
///////////TEMP
QObject::connect(&_core->_qtFunc, &qtFunction::addCtData, front, &MainWindow::addCtData);
QObject::connect(&_core->_qtFunc, &qtFunction::sendInitString, front, &MainWindow::recvInitString);
QObject::connect(&_core->_qtFunc, &qtFunction::sendPixmapImageWidget, front, &MainWindow::recvPixmapImageWidget);
QObject::connect(&_core->_qtFunc, &qtFunction::sendInitFinished, front, &MainWindow::recvInitFinished);
QObject::connect(&_core->_qtFunc, &qtFunction::addDashBoardData, front, &MainWindow::addDashBoardData);
QObject::connect(&_core->_qtFunc, &qtFunction::addCtData, front, &MainWindow::addCtData);
QObject::connect(&_core->_qtFunc, &qtFunction::addHistoryDataSignal, front, &MainWindow::addDetHistoryData);
QObject::connect(&_core->_qtFunc, &qtFunction::switchStartBtnStatusSignal,
front->_displayWidget->_switchProductWidget, &switchProductWidget::switchStartBtnStatus);
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleLocationMap_ResetToDefault,
front->_displayWidget->_uiModuleLocationMap, &uiModuleLocationMap::resetToDefault);
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleLocationMap_SetProductSignStatus,
front, &MainWindow::uiModuleLocationMapSetProductSignStatus);
2024-08-09 17:38:23 +08:00
//uiModuleImageDoubleCheckQdialog
2024-08-07 09:16:35 +00:00
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleImageDoubleCheckQdialog_ShowWindows,
2024-08-26 15:45:15 +08:00
front, [=](imageDoubleCheckPack pack) {front->_imageDoubleCheckQdialog->showAndSetImg(pack); });
2024-08-09 17:38:23 +08:00
QObject::connect(front->_imageDoubleCheckQdialog,&imageDoubleCheckQdialog::ngSignal,
_detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressNG);
2024-08-26 15:45:15 +08:00
QObject::connect(front->_imageDoubleCheckQdialog, &imageDoubleCheckQdialog::okSignal,
_detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressOK);
2024-08-09 17:38:23 +08:00
//uiModuleSummaryDataManager
2024-08-07 09:16:35 +00:00
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_SetSummaryResultText,
front, [=](QString text, Qt::GlobalColor color)
{front->_displayWidget->_summaryDataManager->setSummaryResult(text, color); });
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleSummaryDataManager_Reset,
front, [=]() {front->_displayWidget->_summaryDataManager->resetAllValue(); });
2024-08-27 16:12:13 +08:00
QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_disable,
front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setDisabled(true); });
QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_enable,
front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setEnabled(true); });
2024-08-07 09:16:35 +00:00
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleBackContinueDetDialog_show,
front, [=]() {front->_backContinueDetDialog->show(); });
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleBackContinueDetDialog_hide,
front, [=]() {front->_backContinueDetDialog->hide(); });
QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleHistoryListWidget_reset,
front, [=]() {front->_displayWidget->historyImgs->reset(); });
QObject::connect(&_core->_qtFunc, &qtFunction::simpleSiemensTcp_Write100True, &_detProcess->_simpleSiemensTcp, &simpleSiemensTcp::writeDM100TRUE);
QObject::connect(&_core->_qtFunc, &qtFunction::simpleSiemensTcp_Write100False, &_detProcess->_simpleSiemensTcp, &simpleSiemensTcp::writeDM100FALSE);
QObject::connect(&_detProcess->_manualDetThread, &manualDetThread::finishImgReadSignal,
front->_manualDetWidget, &manualDetWidget::finishImgReadSlot);
QObject::connect(front->_manualDetWidget, &manualDetWidget::startManualDetSignal,
&_detProcess->_manualDetThread, &manualDetThread::startManualDetSlot);
QObject::connect(front, &MainWindow::reInitSignal,
_detProcess, [=]() {_detProcess->start(); });
QObject::connect(front->_loadingWidget.retryBtn, &QPushButton::clicked,
_detProcess, [=]() {_detProcess->start(); });
QObject::connect(front->_displayWidget->_switchProductWidget, &switchProductWidget::startArmProgramSignal,
front->_productDetDoubleCheck, &productDetDoubleCheck::showAndSetText);
QObject::connect(front->_productDetDoubleCheck, &productDetDoubleCheck::continueClickedSignal,
_detProcess, &detProcess::writeArmStartSignal);
QObject::connect(front->_backContinueDetDialog, &backContinueDetDialog::continueClickedSignal,
_detProcess, &detProcess::runBackDet);
}
appCore _core;
int main(int argc, char* argv[])
{
if (!isRunAsAdmin())
{
2024-08-08 18:10:55 +08:00
restartAsAdmin();
2024-08-07 09:16:35 +00:00
exit(0);
}
#if enableHideConsle
HWND hWnd = GetConsoleWindow();
if (hWnd) {
ShowWindow(hWnd, SW_HIDE);
}// 隐藏控制台窗口
#endif
QApplication a(argc, argv);
//检测是否已运行
if (appIsRuning() == false)
exit(0);
2024-05-19 15:43:10 +08:00
//////////
2024-08-21 11:33:05 +08:00
cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR);
qRegisterMetaType<imgWidgetShowType>("imgWidgetShowType");
qRegisterMetaType<showImgPack>("showImgPack");
2024-08-07 09:16:35 +00:00
qRegisterMetaType<cv::Mat*>("matPtr");
qRegisterMetaType<cv::Mat>("mat");
qRegisterMetaType<std::string>("stdString");
qRegisterMetaType<historyPack>("historyPack");
qRegisterMetaType<Qt::GlobalColor>("QtGlobalColor");
2024-08-26 15:45:15 +08:00
qRegisterMetaType<imageDoubleCheckPack>("imageDoubleCheckPack");
2024-08-07 09:16:35 +00:00
//_core.initTimer();
2024-05-19 15:43:10 +08:00
MainWindow w;
w.show();
2024-08-07 09:16:35 +00:00
detProcess _detProcess;
connectSignalAndSlots(&w,&_core,&_detProcess);
_detProcess.start();
2024-05-19 15:43:10 +08:00
return a.exec();
2024-05-18 23:53:26 +08:00
}