DieItem.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #include "DieItem.h"
  2. DieItem::DieItem(int row, int col, PICK_DIE_STATUS status, qreal size, QGraphicsItem* parent)
  3. : QGraphicsRectItem(parent), row(row), col(col), status(status) {
  4. setRect(0, 0, size, size); // 设置单元格大小
  5. setBrush(getColorByStatus(status));
  6. // 设置边框(Pen)
  7. setPen(QPen(QColor(0, 0, 0), 0.5)); // 黑色边框,宽度为0.5
  8. }
  9. void DieItem::setSelected(bool selected) {
  10. if (selected) {
  11. setPen(QPen(Qt::red, 1));
  12. setZValue(1);
  13. } else {
  14. setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框
  15. setZValue(0);
  16. }
  17. // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col;
  18. }
  19. void DieItem::setLeftSelected(bool selected) {
  20. if (selected) {
  21. setPen(QPen(Qt::green, 1));
  22. setZValue(1);
  23. } else {
  24. setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框
  25. setZValue(0);
  26. }
  27. // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col;
  28. }
  29. void DieItem::setRightSelected(bool selected) {
  30. if (selected) {
  31. setPen(QPen(QColor("#00F5FF"), 1));
  32. setZValue(1);
  33. } else {
  34. setPen(QPen(Qt::black, 0.5)); // 未选中时恢复为黑色边框
  35. setZValue(0);
  36. }
  37. // qDebug() << "DieItem clicked: Row:" << row << "Col:" << col;
  38. }
  39. // void DieItem::mousePressEvent(QGraphicsSceneMouseEvent *event) {
  40. // if (event->button() == Qt::LeftButton) {
  41. // // isSelected = !isSelected; // 切换选中状态
  42. // // setSelected(isSelected); // 更新边框颜色
  43. // // 获取当前图形项的包围矩形
  44. // QRectF itemRect = boundingRect();
  45. // QPointF center = itemRect.center(); // 矩形的中心点
  46. // // 计算新的矩形尺寸(长宽的 95%)
  47. // qreal newWidth = itemRect.width() * 0.95;
  48. // qreal newHeight = itemRect.height() * 0.95;
  49. // // 计算新的矩形的左上角位置,使其保持原中心位置
  50. // qreal newX = center.x() - newWidth / 2;
  51. // qreal newY = center.y() - newHeight / 2;
  52. // // 创建新的矩形,作为响应区域
  53. // QRectF validArea(newX, newY, newWidth, newHeight);
  54. // // 获取鼠标点击位置
  55. // QPointF clickPos = event->pos();
  56. // // 判断点击位置是否在新的矩形区域内
  57. // if (validArea.contains(clickPos)) {
  58. // // 如果点击在有效区域内,则切换选中状态
  59. // isSelected = !isSelected; // 切换选中状态
  60. // setSelected(isSelected); // 更新边框颜色
  61. // }
  62. // }
  63. // QGraphicsRectItem::mousePressEvent(event); // 调用基类的事件处理
  64. // }
  65. QColor DieItem::getColorByStatus(PICK_DIE_STATUS status) {
  66. switch (status) {
  67. case DIE_EXIST: return QColor(0, 102, 255); // 蓝色
  68. case NO_EXIST: return QColor(200, 200, 200); // 浅灰
  69. case PICK_ING: return QColor(255, 255, 0); // 黄色
  70. case SKIP_DIE: return QColor(128, 128, 128); // 深灰
  71. case EDGE_DIE: return QColor(255, 165, 0); // 橙色
  72. default: return QColor(0, 0, 0);
  73. }
  74. }
  75. int DieItem::getRow() const {
  76. return row;
  77. }
  78. int DieItem::getCol() const {
  79. return col;
  80. }
  81. // void DieItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
  82. // // 创建右键菜单
  83. // QMenu menu;
  84. // QAction *action1 = menu.addAction("菜单项 1");
  85. // QAction *action2 = menu.addAction("菜单项 2");
  86. // // 连接菜单项的信号和槽
  87. // connect(action1, &QAction::triggered, this, &DieItem::handleAction1);
  88. // connect(action2, &QAction::triggered, this, &DieItem::handleAction2);
  89. // // 显示菜单
  90. // menu.exec(event->screenPos());
  91. // }
  92. // void DieItem::handleAction1() {
  93. // // 处理菜单项 1 的逻辑
  94. // qDebug() << "菜单项 1 被点击";
  95. // }
  96. // void DieItem::handleAction2() {
  97. // // 处理菜单项 2 的逻辑
  98. // qDebug() << "菜单项 2 被点击";
  99. // }