MaterialBox.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "MaterialBox.h"
  2. // 构造函数
  3. MaterialBox::MaterialBox(int flag, QWidget *parent) : QWidget(parent) {
  4. // 初始化料盒数据
  5. boxes = {
  6. Material_box("Box 1", Idle),
  7. Material_box("Box 2", Occupied),
  8. Material_box("Box 3", Warning),
  9. Material_box("Box 4", Idle),
  10. Material_box("Box 5", Occupied),
  11. Material_box("Box 6", Warning)
  12. };
  13. // 根据不同窗口设置不同大小 0:小 1:中 2:大
  14. // if (flag == 0) {
  15. // boxWidth = 30; // 每个料盒的宽度
  16. // boxHeight = 18; // 每个料盒的高度
  17. // gap = 10; // 料盒之间的间距
  18. // } else if (flag == 1) {
  19. // boxWidth = 50; // 每个料盒的宽度
  20. // boxHeight = 18; // 每个料盒的高度
  21. // gap = 10;
  22. // } else if (flag == 2) {
  23. // boxWidth = 30; // 每个料盒的宽度
  24. // boxHeight = 18; // 每个料盒的高度
  25. // gap = 10;
  26. // }
  27. }
  28. // 绘制事件
  29. void MaterialBox::paintEvent(QPaintEvent *event) {
  30. QPainter painter(this);
  31. painter.setRenderHint(QPainter::Antialiasing);
  32. // 设置背景颜色
  33. painter.fillRect(this->rect(), Qt::white);
  34. // 网格参数
  35. int boxWidth = 30; // 每个料盒的宽度
  36. int boxHeight = 18; // 每个料盒的高度
  37. int gap = 10; // 料盒之间的间距
  38. int cols = 3; // 每行的列数
  39. // 计算料盒的总宽度和总高度
  40. int totalWidth = cols * boxWidth + (cols - 1) * gap;
  41. int rows = (boxes.size() + cols - 1) / cols; // 计算总行数
  42. int totalHeight = rows * boxHeight + (rows - 1) * gap;
  43. // 计算料盒的起始位置(居中显示)
  44. int startX = (width() - totalWidth) / 2;
  45. int startY = (height() - totalHeight) / 2;
  46. // 绘制所有料盒
  47. for (size_t i = 0; i < boxes.size(); ++i) {
  48. int row = i / cols; // 当前料盒所在的行
  49. int col = i % cols; // 当前料盒所在的列
  50. int x = startX + col * (boxWidth + gap);
  51. int y = startY + row * (boxHeight + gap);
  52. // 绘制料盒外框
  53. QRect boxRect(x, y, boxWidth, boxHeight);
  54. painter.setPen(Qt::black);
  55. painter.drawRect(boxRect);
  56. // 根据状态设置填充颜色
  57. switch (boxes[i].status) {
  58. case Idle:
  59. painter.setBrush(Qt::green); // 空闲状态:绿色
  60. break;
  61. case Occupied:
  62. painter.setBrush(Qt::blue); // 已占用状态:蓝色
  63. break;
  64. case Warning:
  65. painter.setBrush(Qt::red); // 警告状态:红色
  66. break;
  67. }
  68. painter.fillRect(boxRect, painter.brush());
  69. // 在料盒中绘制名称
  70. painter.setPen(Qt::white); // 设置文字颜色为白色
  71. painter.drawText(boxRect, Qt::AlignCenter, boxes[i].name);
  72. }
  73. }
  74. // 鼠标点击事件
  75. // void MaterialBox::mousePressEvent(QMouseEvent *event) {
  76. // int boxWidth = 30; // 每个料盒的宽度
  77. // int boxHeight = 18; // 每个料盒的高度
  78. // int gap = 10; // 料盒之间的间距
  79. // int cols = 3; // 每行的列数
  80. // // 计算料盒的起始位置(居中显示)
  81. // int totalWidth = cols * boxWidth + (cols - 1) * gap;
  82. // int startX = (width() - totalWidth) / 2;
  83. // int startY = 50;
  84. // // 遍历所有料盒,检查是否被点击
  85. // for (size_t i = 0; i < boxes.size(); ++i) {
  86. // int row = i / cols;
  87. // int col = i % cols;
  88. // int x = startX + col * (boxWidth + gap);
  89. // int y = startY + row * (boxHeight + gap);
  90. // QRect boxRect(x, y, boxWidth, boxHeight);
  91. // if (boxRect.contains(event->pos())) {
  92. // // 打印被点击料盒的信息
  93. // qDebug() << "Clicked on:" << boxes[i].name;
  94. // return;
  95. // }
  96. // }
  97. // }