#include "DieItem.h" DieItem::DieItem(int row, int col, PICK_DIE_STATUS status, qreal size, QGraphicsItem* parent) : QGraphicsRectItem(parent), row(row), col(col), status(status) { setRect(0, 0, size, size); // 设置单元格大小 setBrush(getColorByStatus(status)); // 设置边框(Pen) setPen(QPen(QColor(0, 0, 0), 0.5)); // 黑色边框,宽度为0.5 } void DieItem::setSelected(bool selected) { if (selected) { setPen(QPen(Qt::red, 1)); setZValue(1); } else { setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框 setZValue(0); } // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col; } void DieItem::setLeftSelected(bool selected) { if (selected) { setPen(QPen(Qt::green, 1)); setZValue(1); } else { setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框 setZValue(0); } // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col; } void DieItem::setRightSelected(bool selected) { if (selected) { setPen(QPen(QColor("#00F5FF"), 1)); setZValue(1); } else { setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框 setZValue(0); } // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col; } // void DieItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { // if (event->button() == Qt::LeftButton) { // // isSelected = !isSelected; // 切换选中状态 // // setSelected(isSelected); // 更新边框颜色 // // 获取当前图形项的包围矩形 // QRectF itemRect = boundingRect(); // QPointF center = itemRect.center(); // 矩形的中心点 // // 计算新的矩形尺寸(长宽的 95%) // qreal newWidth = itemRect.width() * 0.95; // qreal newHeight = itemRect.height() * 0.95; // // 计算新的矩形的左上角位置,使其保持原中心位置 // qreal newX = center.x() - newWidth / 2; // qreal newY = center.y() - newHeight / 2; // // 创建新的矩形,作为响应区域 // QRectF validArea(newX, newY, newWidth, newHeight); // // 获取鼠标点击位置 // QPointF clickPos = event->pos(); // // 判断点击位置是否在新的矩形区域内 // if (validArea.contains(clickPos)) { // // 如果点击在有效区域内,则切换选中状态 // isSelected = !isSelected; // 切换选中状态 // setSelected(isSelected); // 更新边框颜色 // } // } // QGraphicsRectItem::mousePressEvent(event); // 调用基类的事件处理 // } QColor DieItem::getColorByStatus(PICK_DIE_STATUS status) { switch (status) { case DIE_EXIST: return QColor(0, 102, 255); // 蓝色 case NO_EXIST: return QColor(200, 200, 200); // 浅灰 case PICK_ING: return QColor(255, 255, 0); // 黄色 case SKIP_DIE: return QColor(128, 128, 128); // 深灰 case EDGE_DIE: return QColor(255, 165, 0); // 橙色 default: return QColor(0, 0, 0); } } int DieItem::getRow() const { return row; } int DieItem::getCol() const { return col; } // void DieItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { // // 创建右键菜单 // QMenu menu; // QAction *action1 = menu.addAction("菜单项 1"); // QAction *action2 = menu.addAction("菜单项 2"); // // 连接菜单项的信号和槽 // connect(action1, &QAction::triggered, this, &DieItem::handleAction1); // connect(action2, &QAction::triggered, this, &DieItem::handleAction2); // // 显示菜单 // menu.exec(event->screenPos()); // } // void DieItem::handleAction1() { // // 处理菜单项 1 的逻辑 // qDebug() << "菜单项 1 被点击"; // } // void DieItem::handleAction2() { // // 处理菜单项 2 的逻辑 // qDebug() << "菜单项 2 被点击"; // }