You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wheeldetect/src/tpMain/algela/RoiImgViewer.h

113 lines
2.5 KiB
C++

#ifndef _H_ROIIMGVIEWER_H_
#define _H_ROIIMGVIEWER_H_
#include "lpImgViewer.h"
#include <QMouseEvent>
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<int, QList<QGraphicsItem*> > 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<LP_ROI_NODE> 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<LP_ROI_NODE> mRoiNodeList;
LP_ROI_NODE* mpSelectedRoiNode;
signals:
void roiChanged(QGraphicsItem* pItem);
void roiAdded(QGraphicsItem* pItem);
void roiSelectionChanged(LP_ROI_NODE* pSelectedRoiNode);
private:
};
#endif