#include "mainwindow.h" #include #include #include #include //日志 #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma region 程序启动功能 bool appIsRuning() { QSystemSemaphore sema("monkey", 1, QSystemSemaphore::Open); sema.acquire(); QSharedMemory mem("DetUi"); if (mem.create(1) == false) { sema.release(); return false; } sema.release(); 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); //uiModuleImageDoubleCheckQdialog QObject::connect(&_core->_qtFunc, &qtFunction::uiModuleImageDoubleCheckQdialog_ShowWindows, front, [=](imageDoubleCheckPack pack) {front->_imageDoubleCheckQdialog->showAndSetImg(pack); }); QObject::connect(front->_imageDoubleCheckQdialog,&imageDoubleCheckQdialog::ngSignal, _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressNG); QObject::connect(front->_imageDoubleCheckQdialog, &imageDoubleCheckQdialog::okSignal, _detProcess, &detProcess::uiModuleImageDoubleCheckQdialog_pressOK); //uiModuleSummaryDataManager 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(); }); QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_disable, front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setDisabled(true); front->_displayWidget->_switchProductWidget->disableTextChange = true; front->_displayWidget->_switchProductWidget->startBtn->setText(" "); }); QObject::connect(&_core->_qtFunc, &qtFunction::uiModulestartDetBtn_enable, front, [=]() {front->_displayWidget->_switchProductWidget->startBtn->setEnabled(true); front->_displayWidget->_switchProductWidget->disableTextChange = false; front->_displayWidget->_switchProductWidget->startBtn->setText("运行"); }); 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()) { restartAsAdmin(); exit(0); } #if enableHideConsle HWND hWnd = GetConsoleWindow(); if (hWnd) { ShowWindow(hWnd, SW_HIDE); }// 隐藏控制台窗口 #endif QApplication a(argc, argv); //检测是否已运行 if (appIsRuning() == false) exit(0); ////////// cv::utils::logging::setLogLevel(cv::utils::logging::LOG_LEVEL_ERROR); qRegisterMetaType("imgWidgetShowType"); qRegisterMetaType("showImgPack"); qRegisterMetaType("matPtr"); qRegisterMetaType("mat"); qRegisterMetaType("stdString"); qRegisterMetaType("historyPack"); qRegisterMetaType("QtGlobalColor"); qRegisterMetaType("imageDoubleCheckPack"); //_core.initTimer(); MainWindow w; w.show(); detProcess _detProcess; connectSignalAndSlots(&w,&_core,&_detProcess); _detProcess.start(); return a.exec(); }