#pragma once #include #include #include #include #include #include #include #include #include #include "global.h" #include "GlobalDefine.h" class MyQGraphicsLineItem : public QObject, public QGraphicsLineItem { Q_OBJECT public: MyQGraphicsLineItem(QObject *parent); MyQGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = nullptr) : QGraphicsLineItem(x1, y1, x2, y2, parent) {} ~MyQGraphicsLineItem(); bool CoordAxis() const { return m_isCoordAxis; } void CoordAxis(bool val) { m_isCoordAxis = val; } int Id() const { return m_id; } void Id(int val) { m_id = val; } QPointF FirstPoint() const { return m_firstPoint; } void FirstPoint(QPointF val) { m_firstPoint = val; } QPointF SecondPoint() const { return m_secondPoint; } void SecondPoint(QPointF val) { m_secondPoint = val; } double ActualP1DieCoordX() const { return m_actualP1DieCoordX; } void ActualP1DieCoordX(double val) { m_actualP1DieCoordX = val; } double ActualP1DieCoordY() const { return m_actualP1DieCoordY; } void ActualP1DieCoordY(double val) { m_actualP1DieCoordY = val; } double ActualP2DieCoordX() const { return m_actualP2DieCoordX; } void ActualP2DieCoordX(double val) { m_actualP2DieCoordX = val; } double ActualP2DieCoordY() const { return m_actualP2DieCoordY; } void ActualP2DieCoordY(double val) { m_actualP2DieCoordY = val; } private: bool JudgeIsFeatruePoint(QPointF& mousePos); double GetStartAngle(); public: void SetLineItemAttr(QPointF& firstPoint, QPointF& secondPoint); void SetActualCoordAndUpdate(double actualP1DieCoordX,double actualP1DieCoordY, double actualP2DieCoordX,double actualP2DieCoordY); protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; void mousePressEvent(QGraphicsSceneMouseEvent *event) override; void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; signals: void signal_select(int id); private: bool m_isPressDown; //鼠标左键已经按下 QPointF m_mousePressDownPos; //鼠标按下时在场景中的位置 double m_rotateAngle = 0.0; //鼠标按下时旋转的角度 bool m_isCoordAxis = false; //是不是坐标轴线 QLineF m_levelLine; //水平线,用于计算旋转夹角 QPointF m_firstPoint; //自己线段第一个点 QPointF m_secondPoint; //自己线段第二个点 bool m_isInFraturePoint = false; //是否在绘制的特征点内,用于按住进行旋转 bool m_isNeedSelect = false; //是否在场景中被选中 double m_actualP1DieCoordX = 0.0; //界面设置的真实坐标 double m_actualP1DieCoordY = 0.0;//界面设置的真实坐标 double m_actualP2DieCoordX = 0.0;//界面设置的真实坐标 double m_actualP2DieCoordY = 0.0;//界面设置的真实坐标 int m_id; //唯一标识 };