123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "MaterialBox.h"
- // 构造函数
- MaterialBox::MaterialBox(int flag, QWidget *parent) : QWidget(parent) {
- // 初始化料盒数据
- boxes = {
- Material_box("Box 1", Idle),
- Material_box("Box 2", Occupied),
- Material_box("Box 3", Warning),
- Material_box("Box 4", Idle),
- Material_box("Box 5", Occupied),
- Material_box("Box 6", Warning)
- };
- // 根据不同窗口设置不同大小 0:小 1:中 2:大
- // if (flag == 0) {
- // boxWidth = 30; // 每个料盒的宽度
- // boxHeight = 18; // 每个料盒的高度
- // gap = 10; // 料盒之间的间距
- // } else if (flag == 1) {
- // boxWidth = 50; // 每个料盒的宽度
- // boxHeight = 18; // 每个料盒的高度
- // gap = 10;
- // } else if (flag == 2) {
- // boxWidth = 30; // 每个料盒的宽度
- // boxHeight = 18; // 每个料盒的高度
- // gap = 10;
- // }
- }
- // 绘制事件
- void MaterialBox::paintEvent(QPaintEvent *event) {
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- // 设置背景颜色
- painter.fillRect(this->rect(), Qt::white);
- // 网格参数
- int boxWidth = 30; // 每个料盒的宽度
- int boxHeight = 18; // 每个料盒的高度
- int gap = 10; // 料盒之间的间距
- int cols = 3; // 每行的列数
- // 计算料盒的总宽度和总高度
- int totalWidth = cols * boxWidth + (cols - 1) * gap;
- int rows = (boxes.size() + cols - 1) / cols; // 计算总行数
- int totalHeight = rows * boxHeight + (rows - 1) * gap;
- // 计算料盒的起始位置(居中显示)
- int startX = (width() - totalWidth) / 2;
- int startY = (height() - totalHeight) / 2;
- // 绘制所有料盒
- for (size_t i = 0; i < boxes.size(); ++i) {
- int row = i / cols; // 当前料盒所在的行
- int col = i % cols; // 当前料盒所在的列
- int x = startX + col * (boxWidth + gap);
- int y = startY + row * (boxHeight + gap);
- // 绘制料盒外框
- QRect boxRect(x, y, boxWidth, boxHeight);
- painter.setPen(Qt::black);
- painter.drawRect(boxRect);
- // 根据状态设置填充颜色
- switch (boxes[i].status) {
- case Idle:
- painter.setBrush(Qt::green); // 空闲状态:绿色
- break;
- case Occupied:
- painter.setBrush(Qt::blue); // 已占用状态:蓝色
- break;
- case Warning:
- painter.setBrush(Qt::red); // 警告状态:红色
- break;
- }
- painter.fillRect(boxRect, painter.brush());
- // 在料盒中绘制名称
- painter.setPen(Qt::white); // 设置文字颜色为白色
- painter.drawText(boxRect, Qt::AlignCenter, boxes[i].name);
- }
- }
- // 鼠标点击事件
- // void MaterialBox::mousePressEvent(QMouseEvent *event) {
- // int boxWidth = 30; // 每个料盒的宽度
- // int boxHeight = 18; // 每个料盒的高度
- // int gap = 10; // 料盒之间的间距
- // int cols = 3; // 每行的列数
- // // 计算料盒的起始位置(居中显示)
- // int totalWidth = cols * boxWidth + (cols - 1) * gap;
- // int startX = (width() - totalWidth) / 2;
- // int startY = 50;
- // // 遍历所有料盒,检查是否被点击
- // for (size_t i = 0; i < boxes.size(); ++i) {
- // int row = i / cols;
- // int col = i % cols;
- // int x = startX + col * (boxWidth + gap);
- // int y = startY + row * (boxHeight + gap);
- // QRect boxRect(x, y, boxWidth, boxHeight);
- // if (boxRect.contains(event->pos())) {
- // // 打印被点击料盒的信息
- // qDebug() << "Clicked on:" << boxes[i].name;
- // return;
- // }
- // }
- // }
|