#ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H #include #include #include class GraphicsTextEdit : public QTextEdit { Q_OBJECT public: GraphicsTextEdit(QWidget* parent = nullptr); ~GraphicsTextEdit(); void setDefeaultColor(const QColor& color); private slots: void on_textChanged(); private: QColor m_defeaultColor; }; class GraphicsScene : public QGraphicsScene { Q_OBJECT public: enum STATUS { Normal = 0, CreateRect, CreateEllipse, CreateLine, CreateText, CreateArrow, CreatePen, Erase }; enum { None, Rect, Ellipse, Line, Text, Arrow, Pen }; public: GraphicsScene(QObject* parent = nullptr); ~GraphicsScene(); void setColor(const QColor& color); void setTextSize(int size); void setLineWidth(int width); void setItemFlag(int flag); void unDo(); private: QPainterPath createArrowPath(const QPointF& p1, const QPointF& p2); protected: virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent); virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent); private: STATUS m_status; QGraphicsItem* m_activeItem; int m_btn_pressed; QPointF m_startPoint; QPen m_pen; QBrush m_brush; QFont m_font; GraphicsTextEdit* m_edit; }; #endif // GRAPHICSSCENE_H