code_app/app/scanner2/graphicsscene.h

97 lines
1.8 KiB
C++

#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QTextEdit>
#include <vector>
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,
CreateMask,
CreateRect,
CreateEllipse,
CreateLine,
CreateText,
CreateArrow,
CreatePen,
Erase
};
enum
{
None,
Mask,
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);
bool isCanUndo();
void undo();
bool isCanRedo();
void redo();
void clear();
signals:
void itemChanged();
private:
void flush();
void updateShow();
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;
QPointF m_startPoint;
QPen m_pen;
QBrush m_brush;
QFont m_font;
GraphicsTextEdit* m_edit;
std::vector<QGraphicsItem*> m_ItemList;
int m_curItemIndex;
};
#endif // GRAPHICSSCENE_H