#pragma once #include #include #include #include #include #include #include #include #include "global.h" #include "GlobalDefine.h" class MyDrawRectItem : public QObject, public QGraphicsRectItem { Q_OBJECT public: enum TransformType { NONE, MOVE, ROTATE, SCALE }; public: MyDrawRectItem(qreal x, qreal y, qreal width, qreal height, QGraphicsItem *parent = nullptr) : QGraphicsRectItem(x, y, width, height, parent) { } ~MyDrawRectItem(); int Id() const { return m_id; } void Id(int val) { m_id = val; } double RectX() const { return m_rectX; } void RectX(double val) { m_rectX = val; } double RectY() const { return m_rectY; } void RectY(double val) { m_rectY = val; } double Width() const { return m_width; } void Width(double val) { m_width = val; } double Height() const { return m_height; } void Height(double val) { m_height = val; } private: void CountPerVertexCoord(double xCoord, double yCoord, int pointPos); //pointPos:0:左下,1,右上,2:右下 void CountRectVertexCoord(); public: void SetDrawRectAttr(double x1, double y1, double width, double height); void SetActualDieCoordAndUpdate(double x1, double y1, double width, double height, double angle); 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: //矩形属性: double m_rectX; double m_rectY; double m_width; double m_height; double m_rotateAngle = 0; double m_leftDownX; double m_leftDownY; double m_rightTopX; double m_rightTopY; double m_rightDownX; double m_rightDownY; QLineF m_levelLine; int m_id; bool m_isMoustLeftPress = false; TransformType m_translteType; QPointF m_mousePressDownPos; //鼠标按下时在场景中的位置 double m_backupWidth = 0.0; double m_backupHeight = 0.0; double m_initScale = 1.0; double m_nowScale = 0; };