#ifndef ROISCENE #define ROISCENE #include #include "DrawTool.h" #include "RoiItem.h" #include "lpbengine.h" #include "lpdesigner.h" #include #include QT_BEGIN_NAMESPACE class QGraphicsSceneMouseEvent; class QMenu; class QPointF; class QGraphicsLineItem; class QFont; class QGraphicsTextItem; class QColor; QT_END_NAMESPACE enum DirType { UP = 0, DOWN, LEFT, RIGHT, }; typedef enum { ENUM_DELROI = 0, ENUM_LOCKROI, ENUM_UNLOCKROI, ENUM_BINDROI, ENUM_UNBINDROI, ENUM_RELEASEBIN, ENUM_DEFAULT }enumMemuModel; typedef struct tagROIParas{ QRectF rectf; enumMemuModel _model{ENUM_UNLOCKROI}; }ROIParas; class GraphicsItem; class RoiScene : public QGraphicsScene { Q_OBJECT public: explicit RoiScene(QObject *parent = 0); ~RoiScene(); int getGraphItems() const{ return m_graphItemMapStruct.size(); }; void mouseEvent(QGraphicsSceneMouseEvent *mouseEvent); bool Initialize(LP_DETECTOR_ROI_DATA roiData); bool CheckRecord(Item_List &record, int maxwidth, int maxheight); bool InitRecord(Item_List record, int nIndex); void InitShowImage(cv::Mat img); void DisableMenu(bool bRet) { m_bDisableMenu = bRet; } void MoveSelectedItem(DirType type,int step = 1); void SetSelectedItem(QPoint pos, QRect size); void SetGraphicsView(QGraphicsView* ipGV){ mpGraphicsView = ipGV; } void SetInfoLable(QLabel* ipLable){ mpInfoLabel = ipLable; } QPointF GetOffSet(){ return mImgPosOffSet; } void zoomImage(bool bZoomIn); void scaleImageWithFixedViewSize(); bool InImgRectangel(GraphicsItem *pItem); QPointF getCenterPoint(){ return centerPoint; }; QPointF getStartPoint(){ return startPoint; }; void updateLineItem(); void updateTenItem(bool bFlag); int flag{ 0 }; bool bUseTenFlag{ false }; signals: void sgResetItem(QPoint pos, QRect size); protected: void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent); void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent); void wheelEvent(QGraphicsSceneWheelEvent * wheelEvent); void keyPressEvent(QKeyEvent *event); void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent * event); void hoverMoveEvent(QGraphicsSceneHoverEvent *event); void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); void scaleImg(qreal scale); void updateInfoLable(); QRectF maptoImgNewPos(GraphicsItem *pItem); QPoint maptoImgPos(QPointF& iscenePos); protected: QPoint m_tCurrentPos; QGraphicsPixmapItem* m_pImageItem{ nullptr }; bool m_bDisableMenu; QGraphicsView* mpGraphicsView{ nullptr }; QLabel* mpInfoLabel{ nullptr }; QSize mImgOriSize; QPointF mImgPosOffSet; QImage* mpShowImage{ nullptr }; QPointF centerPoint; QPointF startPoint; qreal mFixedSizeScale{ 1.0 }; QMap m_graphItemMapStruct; QGraphicsLineItem *pLineItem{ nullptr }; QGraphicsLineItem *pTenLineITemH{ nullptr }; QGraphicsLineItem *pTenLineITemV{ nullptr }; }; #endif // ROISCENE