MaterialBoxGraphicsView.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #ifndef MATERIALBOXGRAPHICSVIEW_H
  2. #define MATERIALBOXGRAPHICSVIEW_H
  3. #include <QGraphicsView>
  4. #include <QGraphicsScene>
  5. #include <QGraphicsRectItem>
  6. #include <QMouseEvent>
  7. #include <QLabel>
  8. #include <QPointer>
  9. #include <QGraphicsItem>
  10. #include <QPainter>
  11. #include <QColor>
  12. #include <QGraphicsSceneEvent>
  13. #include <QDebug>
  14. #include <CViewInterface.h>
  15. class BackgroundRect : public QGraphicsItem {
  16. public:
  17. BackgroundRect(int containerWidthdp, int containerHeightdp, int containerWidth, int containerHeight)
  18. : m_containerWidthdp(containerWidthdp), m_containerHeightdp(containerHeightdp), m_containerWidth(containerWidth), m_containerHeight(containerHeight) {
  19. setFlag(QGraphicsItem::ItemIsSelectable);
  20. setFlag(QGraphicsItem::ItemIsMovable, false);
  21. setFlag(QGraphicsItem::ItemIsFocusable, false);
  22. setAcceptedMouseButtons(Qt::NoButton); // 禁用所有鼠标按键
  23. setAcceptHoverEvents(false); // 禁用悬停事件
  24. }
  25. QRectF boundingRect() const override {
  26. return QRectF(m_containerWidthdp, m_containerHeightdp, m_containerWidth, m_containerHeight);
  27. }
  28. void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override ;
  29. private:
  30. int m_containerWidthdp;
  31. int m_containerHeightdp;
  32. int m_containerWidth;
  33. int m_containerHeight;
  34. // 可选:显式忽略所有鼠标事件
  35. void mousePressEvent(QGraphicsSceneMouseEvent* event) override {
  36. event->ignore(); // 允许事件穿透
  37. }
  38. };
  39. class MaterialBoxDie:public QObject, public QGraphicsRectItem{
  40. Q_OBJECT
  41. public:
  42. MaterialBoxDie(int currentLayer, int status, qreal weight,qreal height, QGraphicsItem* parent = nullptr);
  43. void setLeftSelected(bool selected);
  44. void setRightSelected(bool selected);
  45. int getCurrentLayer();
  46. private:
  47. int m_ncurrentLayer;
  48. int status;
  49. bool isSelected = false;
  50. // 获取单元格状态颜色
  51. QColor getColorByStatus(int status);
  52. };
  53. class MaterialBoxGraphicsView : public QGraphicsView {
  54. Q_OBJECT
  55. public:
  56. MaterialBoxGraphicsView(QGraphicsScene* scene, QWidget* parent = nullptr);
  57. void setCViewInterface(ns_module::CViewInterface* CViewInterface);
  58. signals:
  59. void layerRightClicked(int layer);
  60. protected:
  61. void mousePressEvent(QMouseEvent* event) override;
  62. // void mouseMoveEvent(QMouseEvent* event) override;
  63. void mouseReleaseEvent(QMouseEvent* event) override;
  64. void wheelEvent(QWheelEvent* event) override;
  65. // bool eventFilter(QObject *obj, QEvent *event) override;
  66. void clearSeleted();
  67. private:
  68. double scaleFactor; // 当前缩放比例
  69. QPointer<MaterialBoxDie> selectedLeftItem;
  70. QPointer<MaterialBoxDie> selectedRightItem;
  71. ns_module::CViewInterface* m_pCViewInterface;
  72. };
  73. #endif // MATERIALBOXGRAPHICSVIEW_H