OriginalWnd.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. #include "OriginalWnd.h"
  2. #include "Login.h"
  3. #include "ui_OriginalWnd.h"
  4. #include "OriginalWnd/ChartsAndCamerasWnd.h"
  5. #include "OriginalWnd/MainAndSecondaryCamerasWnd.h"
  6. #include "OriginalWnd/SingleCameraOperationWnd.h"
  7. #include "OriginalWnd/DbTreeViewManager.h"
  8. #include "Src/Sql/SqlOperation.h"
  9. #include <QDebug>
  10. #include <QJsonDocument>
  11. #include <QFile>
  12. #include <QFileDialog>
  13. #include <QDateTime>
  14. #include <QTimer>
  15. #include <QSettings>
  16. #include <QMouseEvent>
  17. #include <QDir>
  18. OriginalWnd::OriginalWnd(QWidget* parent, CameraBind* pCameraBind)
  19. : QMainWindow(parent)
  20. , ui(new Ui::OriginalWnd)
  21. {
  22. ui->setupUi(this);
  23. m_pCameraBind = pCameraBind;
  24. m_pCameraDistribute = CameraDistribute::GetInstance();
  25. StatusBar();
  26. RegFun();
  27. if (gen_if.getLanguageValue() == 0)//TODO: 这里有问题吧.... ==-1 也加载?
  28. {
  29. }
  30. else
  31. {
  32. setChineseMode(this);
  33. }
  34. InitForm();
  35. }
  36. OriginalWnd::~OriginalWnd()
  37. {
  38. Del();
  39. delete ui;
  40. }
  41. void OriginalWnd::CameraBindInit(CameraBind* pCameraBind)
  42. {
  43. m_pCameraBind= pCameraBind;
  44. }
  45. void OriginalWnd::RegFun()
  46. {
  47. qRegisterMetaType<CAxis::AXIS_TYPE>("CAxis::AXIS_TYPE");
  48. qRegisterMetaType<ns_module::ST_BUTTON_FUN>("ns_module::ST_BUTTON_FUN");
  49. }
  50. QWidget* OriginalWnd::getWidgetLeft() const
  51. {
  52. return ui->widget;
  53. }
  54. void OriginalWnd::SwitchToConfig(const QString& name, int configId, int menuArrayIndex, bool isMenuArray /*= true*/)
  55. {
  56. int userPrivilege = 0x1; // 初始设为 1,后续通过登录获取
  57. m_pdbTreeViewManager->initializeTree(name, userPrivilege);
  58. m_pdbTreeViewManager->currentMenuId = configId;
  59. if (isMenuArray)
  60. {
  61. if (m_pdbTreeViewManager->menuArray[menuArrayIndex].isthird == true) {
  62. m_pdbTreeViewManager->loadpage(configId);
  63. }
  64. }
  65. }
  66. void OriginalWnd::switchToHomeConfig()
  67. {
  68. SwitchToConfig("Home", 1, 0, false);
  69. }
  70. void OriginalWnd::switchToProductionConfig()
  71. {
  72. SwitchToConfig("ProductionAssist", 2, 0);
  73. }
  74. void OriginalWnd::switchToDiagnosisConfig()
  75. {
  76. SwitchToConfig("Diagnosis", 2, 0);
  77. }
  78. void OriginalWnd::switchToDispositionConfig()
  79. {
  80. SwitchToConfig("Calibration", 6, 4);
  81. }
  82. void OriginalWnd::switchToModuleConfig()
  83. {
  84. SwitchToConfig("ModuleConfig", 4, 3);
  85. }
  86. void OriginalWnd::switchToProgramConfig()
  87. {
  88. SwitchToConfig("Programme", 5, 1);
  89. }
  90. void OriginalWnd::setChineseMode(QMainWindow* OriginalWnd)
  91. {
  92. OriginalWnd->setWindowTitle(QCoreApplication::translate("OriginalWnd", "主界面", nullptr));
  93. ui->stopButton->setText(QCoreApplication::translate("OriginalWnd", "停止", nullptr));
  94. ui->startButton->setText(QCoreApplication::translate("OriginalWnd", "启动", nullptr));
  95. ui->ChartButton->setText(QString());
  96. ui->DoubleImageButton->setText(QString());
  97. ui->SingleImageButton->setText(QString());
  98. // ui->pushButton_18->setText(QCoreApplication::translate("OriginalWnd", "PushButton", nullptr));
  99. ui->label_name->setText(QCoreApplication::translate("OriginalWnd", "姓名001", nullptr));
  100. ui->RegistrationNumber->setText(QCoreApplication::translate("OriginalWnd", "注册号码 001", nullptr));
  101. ui->CalibrationButton->setText(QCoreApplication::translate("OriginalWnd", "校准", nullptr));
  102. ui->ProductIotNumber->setText(QCoreApplication::translate("OriginalWnd", "xxx生产编号", nullptr));
  103. ui->MachineLink->setText(QString());
  104. ui->HostStatus->setText(QString());
  105. ui->label_time->setText(QString());
  106. ui->label_username->setText(QString());
  107. ui->label_userlogo->setText(QString());
  108. }
  109. void OriginalWnd::switchToSystemConfig()
  110. {
  111. QString name = "SystemInfor";
  112. int configId = 7; // System_config.json 对应的 ConfigId
  113. int userPrivilege = 0x1; // 初始设为 1,后续通过登录获取
  114. m_pdbTreeViewManager->initializeTree(name, userPrivilege);
  115. }
  116. void OriginalWnd::InitForm()
  117. {
  118. InitTreeViewManager();
  119. m_nTimerID = startTimer(100);
  120. m_pLogStateSidebar = new LogStateSidebar(this);
  121. m_pLogStateSidebar->move(-m_pLogStateSidebar->width(), 0);
  122. m_pLogStateSidebar->resize(m_pLogStateSidebar->width(), height());
  123. //给stopbutton加样式
  124. QString stopButton_styleSheet = "QToolButton:hover { background: #cc0000; }"
  125. "QToolButton:pressed { background: #990000; }";
  126. ui->stopButton->setStyleSheet(stopButton_styleSheet);
  127. ui->stopButton->setIcon(QIcon(":/images/light/stop.png"));
  128. ui->startButton->setIcon(QIcon(":/images/light/start.png"));
  129. ui->label_userlogo->setPixmap(QPixmap(":/images/TopStatusBar/user.png").scaled(20, 20, Qt::KeepAspectRatio));
  130. ui->label_username->setText(tr("SBT_QQ", "SBT_QQ"));
  131. ui->label_username->setStyleSheet("QLabel { color : White; }"
  132. "QLabel:hover { color : red; }");
  133. CreateSwitchMainPage();
  134. ui->label_userlogo->installEventFilter(this);
  135. ui->label_username->installEventFilter(this);
  136. // 这个地方是否也要保存切换?
  137. SwitchToConfig("Home", 1, 0, false);
  138. }
  139. void OriginalWnd::InitTreeViewManager()
  140. {
  141. m_pdbTreeViewManager.reset(new DbTreeViewManager(ui->menuFunctionsSwitchWidget, this));
  142. connect(m_pdbTreeViewManager.get(), &DbTreeViewManager::RunFunSignals, this, &OriginalWnd::JRunFunSlots);
  143. // 把TreeViewManager放到页面上
  144. QVBoxLayout* layout = new QVBoxLayout(ui->menuFunctionsSwitchWidget);
  145. layout->addWidget(m_pdbTreeViewManager.get());
  146. ui->menuFunctionsSwitchWidget->setLayout(layout);
  147. }
  148. void OriginalWnd::UpdateTime()
  149. {
  150. QDateTime currentDateTime = QDateTime::currentDateTime();
  151. QString timeStr = currentDateTime.toString("yyyy-MM-dd HH:mm:ss");
  152. ui->label_time->setText(timeStr);
  153. //// 用户也要放到注册表?
  154. //QSettings settings("YourCompany_2", "YourAppName_2");
  155. //QString userName = settings.value("userName", "???").toString();
  156. //ui->label_username->setText(userName);
  157. }
  158. void OriginalWnd::Del()
  159. {
  160. killTimer(m_nTimerID);
  161. }
  162. void OriginalWnd::RunOrStopSwitch()
  163. {
  164. // 目前样式切换需要调整
  165. if (m_isDisabled)
  166. {
  167. // 当按钮处于禁用状态时,执行停止操作并启用按钮
  168. QString styleSheet = "QToolButton { background: #4AB832; color: #FFFFFF; }"
  169. "QToolButton:hover { background: #00FF00; }";
  170. ui->startButton->setDisabled(m_isDisabled);
  171. ui->stopButton->setDisabled(!m_isDisabled);
  172. ui->startButton->setStyleSheet(styleSheet);
  173. m_pCameraBind->JRunAutoBond();
  174. }
  175. else
  176. {
  177. // 当按钮处于启用状态时,执行开始操作并禁用按钮
  178. QString styleSheet = "QToolButton:disabled { color: #808080; background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #F8FBFF, stop: 1 #E7ECF3); }";
  179. ui->startButton->setDisabled(m_isDisabled);
  180. ui->stopButton->setDisabled(!m_isDisabled);
  181. ui->stopButton->setStyleSheet(styleSheet);
  182. m_pCameraBind->JRunStop();
  183. }
  184. m_isDisabled = !m_isDisabled; // 切换状态
  185. }
  186. bool OriginalWnd::eventFilter(QObject* obj, QEvent* event)
  187. {
  188. if (obj == this->ui->label_userlogo || obj == this->ui->label_username)
  189. {
  190. //判断事件类型是否为鼠标事件
  191. if (event->type() == QEvent::MouseButtonPress)
  192. {
  193. //转换为鼠标事件
  194. QMouseEvent* mouseenevt = static_cast<QMouseEvent*>(event);
  195. //判断鼠标左键点击
  196. if (mouseenevt->button() == Qt::LeftButton)
  197. {
  198. if (QStackedWidget* parent = qobject_cast<QStackedWidget*>(this->parentWidget()))
  199. {
  200. Login* loginWnd = new Login(this);
  201. parent->addWidget(loginWnd);
  202. parent->setCurrentIndex(parent->indexOf(loginWnd));
  203. }
  204. }
  205. }
  206. }
  207. return QWidget::eventFilter(obj, event);
  208. }
  209. void OriginalWnd::timerEvent(QTimerEvent* event)
  210. {
  211. if (m_nTimerID == event->timerId())
  212. {
  213. UpdateTime();
  214. }
  215. }
  216. void OriginalWnd::resizeEvent(QResizeEvent* event)
  217. {
  218. if (m_pLogStateSidebar)
  219. {
  220. m_pLogStateSidebar->resize(m_pLogStateSidebar->width(), height());
  221. }
  222. QMainWindow::resizeEvent(event);
  223. }
  224. void OriginalWnd::on_ChartButton_clicked()
  225. {
  226. CreateSwitchMainPage(EN_WND_SWITCH::ChartsAnd);
  227. }
  228. void OriginalWnd::on_DoubleImageButton_clicked()
  229. {
  230. CreateSwitchMainPage(EN_WND_SWITCH::MainAndSecondary);
  231. }
  232. void OriginalWnd::on_SingleImageButton_clicked()
  233. {
  234. CreateSwitchMainPage(EN_WND_SWITCH::SingleCameraOperation);
  235. }
  236. void OriginalWnd::on_LogStatBut_clicked()
  237. {
  238. if (m_pLogStateSidebar->isExpanded())
  239. {
  240. m_pLogStateSidebar->HideSidebar();
  241. }
  242. else
  243. {
  244. m_pLogStateSidebar->ShowSidebar();
  245. }
  246. }
  247. void OriginalWnd::on_startButton_clicked()
  248. {
  249. RunOrStopSwitch();
  250. }
  251. void OriginalWnd::on_stopButton_clicked()
  252. {
  253. RunOrStopSwitch();
  254. }
  255. void OriginalWnd::SwitchMainPage(JOriginalMainWnd* pWnd, QToolButton* tooBut)
  256. {
  257. if (m_pCameraBind.isNull())
  258. {
  259. RegFun();
  260. }
  261. m_pCameraBind->SetImageWnd(pWnd);
  262. pWnd->InitMainCameraBind(m_pCameraBind);
  263. ui->switchShowPageUI->addWidget(pWnd);
  264. ui->switchShowPageUI->setCurrentIndex(ui->switchShowPageUI->indexOf(pWnd));
  265. // ui->DoubleImageButton->setStyleSheet("background-color: #A9B4FF;");
  266. tooBut->setChecked(true);
  267. m_pJOriginalMainWnd = pWnd;
  268. }
  269. void OriginalWnd::CreateSwitchMainPage(int nlastIndex /*= -1*/)
  270. {
  271. QSettings settings("OrganizationName__", "ApplicationName__");
  272. if (nlastIndex <= 0)
  273. {
  274. nlastIndex = settings.value("lastIndex", 1).toInt();
  275. }
  276. else
  277. {
  278. settings.setValue("lastIndex", nlastIndex);
  279. }
  280. // 切换窗口
  281. switch (nlastIndex)
  282. {
  283. case EN_WND_SWITCH::ChartsAnd:
  284. {
  285. ChartsAndCamerasWnd* chartsAndCamerasWnd = new ChartsAndCamerasWnd;
  286. SwitchMainPage(chartsAndCamerasWnd, ui->ChartButton);
  287. }
  288. break;
  289. case EN_WND_SWITCH::MainAndSecondary:
  290. {
  291. MainAndSecondaryCamerasWnd* mainAndSecondaryCamerasWnd = new MainAndSecondaryCamerasWnd;
  292. SwitchMainPage(mainAndSecondaryCamerasWnd, ui->DoubleImageButton);
  293. }
  294. break;
  295. case EN_WND_SWITCH::SingleCameraOperation:
  296. {
  297. SingleCameraOperationWnd* singleCameraOperationWnd = new SingleCameraOperationWnd;
  298. SwitchMainPage(singleCameraOperationWnd, ui->SingleImageButton);
  299. }
  300. break;
  301. default:
  302. break;
  303. }
  304. }
  305. void OriginalWnd::onHandleLanguageSignal(const int& data)
  306. {
  307. if (data == 0)
  308. {
  309. ui->retranslateUi(this);
  310. }
  311. else
  312. {
  313. setChineseMode(this);
  314. }
  315. }
  316. void OriginalWnd::JRunFunSlots(ns_module::ST_BUTTON_FUN pra)
  317. {
  318. m_pCameraBind->JRunButton(pra);
  319. }
  320. void OriginalWnd::StatusBar()
  321. {
  322. enum DEVICE_STATUS currentStatus = DEVICE_STATUS::IDLE;
  323. updateCalibrationButtonColor(currentStatus);
  324. enum CONNECT_STATUS currentStatus2 = OriginalWnd::CONNECT_STATUS::NO_CONNECT;
  325. updateMachineLinkColor(currentStatus2);
  326. enum HOST_STATUS currentStatus3 = OriginalWnd::HOST_STATUS::DEVICE_OK;
  327. updateHostStatusColor(currentStatus3);
  328. }
  329. void OriginalWnd::updateCalibrationButtonColor(enum DEVICE_STATUS status)
  330. {
  331. QString styleSheet;
  332. QString buttonText;
  333. switch (status) {
  334. case DEVICE_STATUS::IDLE: // 停机待机
  335. styleSheet = "QPushButton { background-color: green; color: white; }";
  336. buttonText = "IDLE";
  337. break;
  338. case DEVICE_STATUS::RUNING: // 生产
  339. styleSheet = "QPushButton { background-color: green; color: white; }";
  340. buttonText = "RUNING";
  341. break;
  342. case DEVICE_STATUS::CALIB: // 校准
  343. styleSheet = "QPushButton { background-color: yellow; color: black; }";
  344. buttonText = "CALIB";
  345. break;
  346. case DEVICE_STATUS::WARN: // 报警
  347. styleSheet = "QPushButton { background-color: yellow; color: black; }";
  348. buttonText = "WARN";
  349. break;
  350. case DEVICE_STATUS::FAULT: // 故障
  351. styleSheet = "QPushButton { background-color: red; color: white; }";
  352. buttonText = "FAULT";
  353. break;
  354. case DEVICE_STATUS::DIAGNOSE: // 诊断
  355. styleSheet = "QPushButton { background-color: red; color: white; }";
  356. buttonText = "DIAGNOSE";
  357. break;
  358. default: // 未知状态
  359. styleSheet = "QPushButton { background-color: gray; color: white; }";
  360. buttonText = "未知状态";
  361. break;
  362. }
  363. // 设置按钮样式和文本
  364. ui->CalibrationButton->setStyleSheet(styleSheet);
  365. ui->CalibrationButton->setText(buttonText);
  366. }
  367. void OriginalWnd::updateMachineLinkColor(enum CONNECT_STATUS status)
  368. {
  369. QString styleSheet;
  370. QString buttonText;
  371. switch (status) {
  372. case CONNECT_STATUS::NO_CONNECT: // 未连接
  373. styleSheet = "QPushButton { background-color: gray; color: white; }";
  374. break;
  375. case CONNECT_STATUS::CONNECT_ING: // 连接中
  376. styleSheet = "QPushButton { background-color: yellow; color: black; }";
  377. break;
  378. case CONNECT_STATUS::MACHINE_TIMEOUT: // 机台超时
  379. styleSheet = "QPushButton { background-color: orange; color: black; }";
  380. break;
  381. case CONNECT_STATUS::HOST_TIMEOUT: // 主机超时
  382. styleSheet = "QPushButton { background-color: blue; color: white; }";
  383. break;
  384. case CONNECT_STATUS::CONNECT_OK: // 连接成功
  385. styleSheet = "QPushButton { background-color: green; color: white; }";
  386. break;
  387. default: // 未知状态
  388. styleSheet = "QPushButton { background-color: gray; color: white; }";
  389. break;
  390. }
  391. // 设置按钮样式
  392. ui->MachineLink->setStyleSheet(styleSheet);
  393. }
  394. void OriginalWnd::updateHostStatusColor(enum HOST_STATUS status)
  395. {
  396. QString styleSheet;
  397. QString buttonText;
  398. switch (status) {
  399. case HOST_STATUS::HOST_OUT: // 主机离线
  400. styleSheet = "QPushButton { background-color: yellow; color: black; }";
  401. break;
  402. case HOST_STATUS::DEVICE_OUT: // 设备离线
  403. styleSheet = "QPushButton { background-color: orange; color: black; }";
  404. break;
  405. case HOST_STATUS::DEVICE_ING: // 设备试图连线
  406. styleSheet = "QPushButton { background-color: magenta; color: white; }";
  407. break;
  408. case HOST_STATUS::DEVICE_OK: // 设备在线
  409. styleSheet = "QPushButton { background-color: blue; color: white; }";
  410. break;
  411. case HOST_STATUS::HOST_CON_DEVICE: // 主机控制设备
  412. styleSheet = "QPushButton { background-color: green; color: white; }";
  413. break;
  414. default: // 未知状态
  415. styleSheet = "QPushButton { background-color: gray; color: white; }";
  416. break;
  417. }
  418. // 设置按钮样式和文本
  419. ui->HostStatus->setStyleSheet(styleSheet);
  420. }