#pragma once #include "lpImgViewer.h" #include typedef struct tagLP_ROI_NODE { QString id; qreal fScale; QString szChannel; QGraphicsRectItem* pItem; bool isTemplate; }LP_ROI_NODE, *P_LP_ROI_NODE; Q_DECLARE_METATYPE(LP_ROI_NODE*) typedef QMap > RoiItemMap; class RoiImgViewer : public lpImgViewer { Q_OBJECT public: enum MouseCaptureStatus { MouseCaptureLeft, MouseCaptureRight, MouseCaptureTop, MouseCaptureBottom, MouseCaptureNone }; enum DrawStatus { DrawLine, DrawRect, DrawNone }; public: RoiImgViewer(QWidget* parent = 0); ~RoiImgViewer() {}; virtual void wheelEvent(QWheelEvent *evt); QGraphicsPixmapItem* setImg(QImage& img); QGraphicsItem* firstSelectedItem(); void setDrawStatus(DrawStatus s); void clearRois(int type = -1); void clearExistRois(); float getMouseCaptureDistance() const { return mMouseCaptureDistance; } void setMouseCaptureDistance(float val) { mMouseCaptureDistance = val; } void addRoiRect(QRectF rect, qreal scale, QString channelName, QString id, bool isTemplate = true, QColor nonTmplColor = Qt::yellow); void addRoiRect(QRectF rect, qreal scale, QString id); void addRoiLine(QLineF line, QString id); QList getRectROIs() const { return mRoiNodeList; } LP_ROI_NODE* lastRectRoi(); protected: void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *evt); void mouseReleaseEvent(QMouseEvent *event); void keyPressEvent(QKeyEvent *event); MouseCaptureStatus decideMouseCaptureStatus(const QRectF r, QPointF p, float capDis = 10); MouseCaptureStatus decideMouseCaptureStatus(const QLineF l, QPointF p, float capDis = 10); protected slots: void updateSelectedRoiNode(); protected: float mMouseCaptureDistance; MouseCaptureStatus mMouseCaptureStatus; DrawStatus mDrawStatus; QLineF mDrawingLine; QRectF mDrawingRect; QGraphicsLineItem* mpDrawingLineItem; QGraphicsRectItem* mpDrawingRectItem; void updateDrawingItem(); void createDrawingItem(); void acceptDrawingItem(); void rejectDrawingItem(); void resetAllDrawingItems(); void acceptRoiItem(QGraphicsItem* pItem); LP_ROI_NODE* findRoiNode(QGraphicsItem* pItem); RoiItemMap mRoiItemMap; QList mRoiNodeList; LP_ROI_NODE* mpSelectedRoiNode; signals: void roiChanged(QGraphicsItem* pItem); void roiAdded(QGraphicsItem* pItem); void roiSelectionChanged(LP_ROI_NODE* pSelectedRoiNode); private: };