MainAndSecondaryCamerasWnd.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  1. #include "MainAndSecondaryCamerasWnd.h"
  2. #include "ui_MainAndSecondaryCamerasWnd.h"
  3. #include <QSettings>
  4. #include <QCloseEvent>
  5. #include <QVBoxLayout>
  6. #include <QTimer>
  7. #include "CameraMaterialGroupWnd/CameraImage/CameraImageHandler.h"
  8. #include <qDebug.h>
  9. MainAndSecondaryCamerasWnd::MainAndSecondaryCamerasWnd(QWidget *parent)
  10. : QMainWindow(parent)
  11. , ui(new Ui::MainAndSecondaryCamerasWnd)
  12. {
  13. ui->setupUi(this);
  14. QSettings settings("YourOrganization", "YourApplication");
  15. settings.beginGroup("LastSettings");
  16. lastRightPixmap = settings.value("LastRightPixmap").value<QPixmap>();
  17. lasttextList = settings.value("LasttextList").toStringList();
  18. lastLastRightPixmap = settings.value("LastLastRightPixmap").value<QPixmap>();
  19. lastLasttextList = settings.value("LastLasttextList").toStringList();
  20. settings.endGroup();
  21. initFrom();
  22. }
  23. MainAndSecondaryCamerasWnd::~MainAndSecondaryCamerasWnd()
  24. {
  25. delete ui;
  26. }
  27. void MainAndSecondaryCamerasWnd::initFrom()
  28. {
  29. QTimer *timer = new QTimer(this);
  30. connect(timer, &QTimer::timeout, this, &MainAndSecondaryCamerasWnd::checkSettings);
  31. timer->start(100);
  32. ui->Leftlabel_Percentage->setAlignment(Qt::AlignCenter);
  33. ui->Rightlabel_Percentage->setAlignment(Qt::AlignCenter);
  34. initSliders();
  35. initLineEdits();
  36. connectSliderAndLineEdit(ui->RedLightverticalSlider_2, ui->RedLightlineEdit_2);
  37. connectSliderAndLineEdit(ui->GreenLightverticalSlider_5, ui->GreenLightlineEdit_5);
  38. connectSliderAndLineEdit(ui->BlueLightverticalSlider, ui->BlueLightlineEdit_2);
  39. connectSliderAndLineEdit(ui->DotLightverticalSlider_2, ui->DotLightlineEdit_2);
  40. QWidget *viewport = ui->scrollArea->viewport();
  41. QWidget *container = new QWidget(viewport);
  42. QHBoxLayout *mainLayout = new QHBoxLayout(container);
  43. mainLayout->setSpacing(28);
  44. mainLayout->setMargin(0);
  45. QList<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8};
  46. QList<Group*> widgets;
  47. for (int i = 0; i < numbers.size(); ++i) {
  48. int num = numbers[i];
  49. CameraImageHandler* manager = new CameraImageHandler(num);
  50. Group* widget = manager->getGroup();
  51. if (widget != nullptr) {
  52. mainLayout->addWidget(widget);
  53. widgets.append(widget);
  54. }
  55. delete manager;
  56. }
  57. // 设置控件的最小高度和最大宽度
  58. int minHeight = 162;
  59. int maxWidth = 244;
  60. int num = -28;
  61. for (Group* w : widgets) {
  62. w->setMinimumHeight(minHeight);
  63. w->setMaximumWidth(maxWidth);
  64. num = num + 272;
  65. }
  66. container->setMinimumSize(num, 162);
  67. container->setLayout(mainLayout);
  68. ui->scrollArea->setWidget(container);
  69. ui->scrollArea->resize(1062, 177);
  70. ui->LeftOperatewidget->setMouseTracking(true);
  71. ui->RightOperatewidget->setMouseTracking(true);
  72. QSettings settings2("YourOrganization", "YourApplication_lastWndType");
  73. int lastWndType = settings2.value("LastWndType").toInt();
  74. int LastGroup = settings2.value("LastGroup").toInt();
  75. lastIndex = lastWndType;
  76. lastGroupId = LastGroup;
  77. }
  78. void MainAndSecondaryCamerasWnd::initSliders() {
  79. QList<QSlider*> sliders = {
  80. ui->RedLightverticalSlider_2, ui->GreenLightverticalSlider_5,
  81. ui->BlueLightverticalSlider, ui->DotLightverticalSlider_2
  82. };
  83. QList<int> initialValues = {11, 22, 9, 11, 0, 0};
  84. for (int i = 0; i < sliders.size(); ++i) {
  85. sliders[i]->setMinimum(0);
  86. sliders[i]->setMaximum(100);
  87. sliders[i]->setValue(initialValues[i]);
  88. }
  89. }
  90. void MainAndSecondaryCamerasWnd::initLineEdits() {
  91. QList<QLineEdit*> lineEdits = {
  92. ui->RedLightlineEdit_2, ui->GreenLightlineEdit_5,
  93. ui->BlueLightlineEdit_2, ui->DotLightlineEdit_2
  94. };
  95. for (QLineEdit* lineEdit : lineEdits) {
  96. lineEdit->setAlignment(Qt::AlignCenter);
  97. }
  98. }
  99. void MainAndSecondaryCamerasWnd::connectSliderAndLineEdit(QSlider* slider, QLineEdit* lineEdit)
  100. {
  101. QIntValidator* validator = new QIntValidator(slider->minimum(), slider->maximum(), lineEdit);
  102. lineEdit->setValidator(validator);
  103. connect(slider, &QSlider::valueChanged, [lineEdit](int value) {
  104. lineEdit->setText(QString::number(value));
  105. });
  106. connect(lineEdit, &QLineEdit::textChanged, [slider](const QString &text) {
  107. bool ok;
  108. int value = text.toInt(&ok);
  109. if (ok && value >= slider->minimum() && value <= slider->maximum()) {
  110. slider->setValue(value);
  111. } else if (!text.isEmpty()) {
  112. int closestValue = qMin(qMax(text.toInt(&ok), slider->minimum()), slider->maximum());
  113. slider->setValue(closestValue);
  114. }
  115. });
  116. }
  117. void MainAndSecondaryCamerasWnd::checkSettings() {
  118. QSettings settings("YourCompany", "YourApplication_");
  119. int groupId = settings.value("GroupId", 0).toInt();
  120. int index = settings.value("Index", 0).toInt();
  121. if (groupId != lastGroupId || index != lastIndex) {
  122. loadSettings();
  123. lastGroupId = groupId;
  124. lastIndex = index;
  125. }
  126. }
  127. void MainAndSecondaryCamerasWnd::loadSettings()
  128. {
  129. QSettings settings("YourCompany", "YourApplication_");
  130. int groupId = settings.value("GroupId", 0).toInt();
  131. int index = settings.value("Index", 0).toInt();
  132. loadGroupSettings(groupId, index);
  133. }
  134. void MainAndSecondaryCamerasWnd::loadGroupSettings(int Id, int Index) {
  135. // isUpdatingSettings = true;
  136. QSettings settings("YourOrganization", "YourApplication");
  137. settings.beginGroup(QString::number(Id));
  138. QString imagePath1 = settings.value("ImagePath1").toString();
  139. int materialWndType = settings.value("MaterialWndType").toInt();
  140. QStringList textList = settings.value("TextList").toStringList();
  141. settings.endGroup();
  142. QString lastRightImage = settings.value("LastRightImage").toString();
  143. QSize size_left = ui->LeftOperatewidget->size();
  144. QSize size_right = ui->RightOperatewidget->size();
  145. QPixmap newPixmap;
  146. if (Index == 1) {
  147. newPixmap = QPixmap(imagePath1);
  148. clearLayout(1);
  149. if (lastIndex == 1) {
  150. clearLayout(0);
  151. } else if (lastIndex == 2) {
  152. clearLayout(0);
  153. if (lastGroupId == 1) {
  154. WaferWidget(0);
  155. } else if (lastGroupId == 2) {
  156. WaffleWidget(0);
  157. } else if (lastGroupId == 3) {
  158. MaterialBoxWidget(0);
  159. }
  160. }
  161. } else if (Index == 2) {
  162. clearLayout(1);
  163. clearLayout(0);
  164. if (materialWndType == 1) {
  165. if (lastIndex == 2) {
  166. if (lastGroupId == 1) {
  167. WaferWidget(0);
  168. } else if (lastGroupId == 2) {
  169. WaffleWidget(0);
  170. } else if (lastGroupId == 3) {
  171. MaterialBoxWidget(0);
  172. }
  173. }
  174. WaferWidget(1);
  175. } else if (materialWndType == 2) {
  176. if (lastIndex == 2) {
  177. if (lastGroupId == 1) {
  178. WaferWidget(0);
  179. } else if (lastGroupId == 2) {
  180. WaffleWidget(0);
  181. } else if (lastGroupId == 3) {
  182. MaterialBoxWidget(0);
  183. }
  184. }
  185. WaffleWidget(1);
  186. } else if (materialWndType == 3) {
  187. if (lastIndex == 2) {
  188. if (lastGroupId == 1) {
  189. WaferWidget(0);
  190. } else if (lastGroupId == 2) {
  191. WaffleWidget(0);
  192. } else if (lastGroupId == 3) {
  193. MaterialBoxWidget(0);
  194. }
  195. }
  196. MaterialBoxWidget(1);
  197. }
  198. }
  199. QSettings settings2("YourOrganization", "YourApplication_lastWndType");
  200. settings2.setValue("LastWndType", lastIndex);
  201. settings2.setValue("LastGroup", lastGroupId);
  202. QPixmap scaledPixmap_right = newPixmap.scaled(size_right, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  203. ui->RightOperatewidget->setPixmap(scaledPixmap_right);
  204. QPixmap scaledPixmap_left = lastRightPixmap.scaled(size_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  205. ui->LeftOperatewidget->setPixmap(scaledPixmap_left);
  206. // 更新当前图片的成员变量
  207. Left_currentPixmap = scaledPixmap_left;
  208. Left_scaleFactor = 1.0;
  209. Right_currentPixmap = scaledPixmap_right;
  210. Right_scaleFactor = 1.0;
  211. ui->Leftlabel_Percentage->setText("100%");
  212. ui->Rightlabel_Percentage->setText("100%");
  213. ui->LeftDataSources->clear();
  214. ui->LeftDataSources->addItems(lasttextList);
  215. ui->RightDataSources->clear();
  216. ui->RightDataSources->addItems(textList);
  217. // 保存到 QSettings
  218. settings.beginGroup("LastSettings");
  219. settings.setValue("LastRightPixmap", lastRightPixmap);
  220. settings.setValue("LasttextList", lasttextList);
  221. settings.setValue("LastLastRightPixmap", lastLastRightPixmap);
  222. settings.setValue("LastLasttextList", lastLasttextList);
  223. settings.endGroup();
  224. if (isUpdatingSettings) {
  225. lastLastRightPixmap = lastRightPixmap;
  226. lastLasttextList = lasttextList;
  227. lastRightPixmap = scaledPixmap_right;
  228. lasttextList = textList;
  229. }
  230. }
  231. void MainAndSecondaryCamerasWnd::clearLayout(int flag) {
  232. QWidget* widget = (flag == 1) ? ui->RightOperatewidget : ui->LeftOperatewidget;
  233. QLayout* layout = widget->layout();
  234. if (layout) {
  235. QLayoutItem *child;
  236. while ((child = layout->takeAt(0)) != nullptr) {
  237. if (child->widget() != nullptr) {
  238. delete child->widget(); // 删除控件
  239. }
  240. delete child; // 删除布局项
  241. }
  242. delete layout; // 删除布局本身
  243. }
  244. }
  245. // 圆晶
  246. void MainAndSecondaryCamerasWnd::WaferWidget(int flag) {
  247. QWidget *operatewidget = ui->LeftOperatewidget;
  248. if (flag == 1) {
  249. operatewidget = ui->RightOperatewidget;
  250. }
  251. QVBoxLayout *layout = new QVBoxLayout(operatewidget);
  252. wafer = new Wafer(1, operatewidget);
  253. layout->setContentsMargins(0, 0, 0, 0);
  254. layout->addWidget(wafer);
  255. operatewidget->setLayout(layout);
  256. operatewidget->setFixedSize(480, 480);
  257. }
  258. // 华夫盒
  259. void MainAndSecondaryCamerasWnd::WaffleWidget(int flag) {
  260. QWidget *operatewidget = ui->LeftOperatewidget;
  261. if (flag == 1) {
  262. operatewidget = ui->RightOperatewidget;
  263. }
  264. QVBoxLayout *layout = new QVBoxLayout(operatewidget);
  265. waffle = new Waffle(1, operatewidget);
  266. layout->setContentsMargins(0, 0, 0, 0);
  267. layout->addWidget(waffle);
  268. operatewidget->setLayout(layout);
  269. operatewidget->setFixedSize(480, 480);
  270. }
  271. // 料盒
  272. void MainAndSecondaryCamerasWnd::MaterialBoxWidget(int flag) {
  273. QWidget *operatewidget = ui->LeftOperatewidget;
  274. if (flag == 1) {
  275. operatewidget = ui->RightOperatewidget;
  276. }
  277. QVBoxLayout *layout = new QVBoxLayout(operatewidget);
  278. materialbox = new MaterialBox(1, operatewidget);
  279. layout->setContentsMargins(0, 0, 0, 0);
  280. layout->addWidget(materialbox);
  281. operatewidget->setLayout(layout);
  282. operatewidget->setFixedSize(480, 480);
  283. }
  284. void MainAndSecondaryCamerasWnd::on_LeftZoomUpButton_clicked()
  285. {
  286. Left_scaleFactor *= 1.1;
  287. int newWidth = Left_currentPixmap.width() * Left_scaleFactor;
  288. int newHeight = Left_currentPixmap.height() * Left_scaleFactor;
  289. QPixmap scaledImage = Left_currentPixmap.scaled(newWidth, newHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  290. ui->LeftOperatewidget->setPixmap(scaledImage);
  291. double percentage = (Left_scaleFactor * 100);
  292. QString percentageStr = QString::number((int)percentage);
  293. ui->Leftlabel_Percentage->setText(QString("%1%").arg(percentageStr));
  294. }
  295. void MainAndSecondaryCamerasWnd::on_RightZoomUpButton_clicked()
  296. {
  297. Right_scaleFactor *= 1.1;
  298. int newWidth = Right_currentPixmap.width() * Right_scaleFactor;
  299. int newHeight = Right_currentPixmap.height() * Right_scaleFactor;
  300. QPixmap scaledImage = Right_currentPixmap.scaled(newWidth, newHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  301. ui->RightOperatewidget->setPixmap(scaledImage);
  302. double percentage = (Right_scaleFactor * 100);
  303. QString percentageStr = QString::number((int)percentage);
  304. ui->Rightlabel_Percentage->setText(QString("%1%").arg(percentageStr));
  305. }
  306. void MainAndSecondaryCamerasWnd::on_LeftZoomOutButton_clicked()
  307. {
  308. double Left_newScaleFactor = Left_scaleFactor * 0.9;
  309. if (Left_newScaleFactor >= 1.0) {
  310. Left_scaleFactor = Left_newScaleFactor;
  311. } else {
  312. Left_scaleFactor = 1.0;
  313. }
  314. int newWidth = Left_currentPixmap.width() * Left_scaleFactor;
  315. int newHeight = Left_currentPixmap.height() * Left_scaleFactor;
  316. QPixmap scaledImage = Left_currentPixmap.scaled(newWidth, newHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  317. ui->LeftOperatewidget->setPixmap(scaledImage);
  318. double percentage = (Left_scaleFactor * 100);
  319. QString percentageStr = QString::number((int)percentage);
  320. ui->Leftlabel_Percentage->setText(QString("%1%").arg(percentageStr));
  321. }
  322. void MainAndSecondaryCamerasWnd::on_RightZoomOutButton_clicked()
  323. {
  324. double Right_newScaleFactor = Right_scaleFactor * 0.9;
  325. if (Right_newScaleFactor >= 1.0) {
  326. Right_scaleFactor = Right_newScaleFactor;
  327. } else {
  328. Right_scaleFactor = 1.0;
  329. }
  330. int newWidth = Right_currentPixmap.width() * Right_scaleFactor;
  331. int newHeight = Right_currentPixmap.height() * Right_scaleFactor;
  332. QPixmap scaledImage = Right_currentPixmap.scaled(newWidth, newHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  333. ui->RightOperatewidget->setPixmap(scaledImage);
  334. double percentage = (Right_scaleFactor * 100);
  335. QString percentageStr = QString::number((int)percentage);
  336. ui->Rightlabel_Percentage->setText(QString("%1%").arg(percentageStr));
  337. }
  338. void MainAndSecondaryCamerasWnd::wheelEvent(QWheelEvent *event)
  339. {
  340. if (ui->LeftOperatewidget->rect().contains(ui->LeftOperatewidget->mapFromGlobal(event->globalPosition().toPoint()))) {
  341. if (event->angleDelta().y() > 0) {
  342. Left_scaleFactor *= 1.1;
  343. } else {
  344. double Left_newScaleFactor = Left_scaleFactor * 0.9;
  345. if (Left_newScaleFactor >= 1.0) {
  346. Left_scaleFactor = Left_newScaleFactor;
  347. } else {
  348. Left_scaleFactor = 1.0;
  349. }
  350. }
  351. int newWidth_left = Left_currentPixmap.width() * Left_scaleFactor;
  352. int newHeight_left = Left_currentPixmap.height() * Left_scaleFactor;
  353. QPixmap scaledImage_left = Left_currentPixmap.scaled(newWidth_left, newHeight_left, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  354. ui->LeftOperatewidget->setPixmap(scaledImage_left);
  355. double percentage_left = Left_scaleFactor * 100;
  356. QString percentageStr_left = QString::number((int)percentage_left);
  357. ui->Leftlabel_Percentage->setText(QString("%1%").arg(percentageStr_left));
  358. }
  359. if (ui->RightOperatewidget->rect().contains(ui->RightOperatewidget->mapFromGlobal(event->globalPosition().toPoint()))) {
  360. if (event->angleDelta().y() > 0) {
  361. Right_scaleFactor *= 1.1;
  362. } else {
  363. double Right_newScaleFactor = Right_scaleFactor * 0.9;
  364. if (Right_newScaleFactor >= 1.0) {
  365. Right_scaleFactor = Right_newScaleFactor;
  366. } else {
  367. Right_scaleFactor = 1.0;
  368. }
  369. }
  370. int newWidth = Right_currentPixmap.width() * Right_scaleFactor;
  371. int newHeight = Right_currentPixmap.height() * Right_scaleFactor;
  372. QPixmap scaledImage = Right_currentPixmap.scaled(newWidth, newHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
  373. ui->RightOperatewidget->setPixmap(scaledImage);
  374. double percentage = Right_scaleFactor * 100;
  375. QString percentageStr = QString::number((int)percentage);
  376. ui->Rightlabel_Percentage->setText(QString("%1%").arg(percentageStr));
  377. }
  378. QMainWindow::wheelEvent(event);
  379. }
  380. void MainAndSecondaryCamerasWnd::showEvent(QShowEvent *event) {
  381. isUpdatingSettings = false;
  382. QMainWindow::showEvent(event);
  383. loadSettings();
  384. isUpdatingSettings = true;
  385. }
  386. void MainAndSecondaryCamerasWnd::hideEvent(QHideEvent *event) {
  387. isUpdatingSettings = false;
  388. QMainWindow::hideEvent(event);
  389. }