#ifndef CMYLABEL_H
#define CMYLABEL_H
#include <QLabel>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QPainter>
#include <QList>
class CMyLabel : public QLabel
{
Q_OBJECT
public:
//鼠标拖动当前特征点
int n;
QList<QPoint> m_listCenter;//存储中心点坐标
bool m_bStartDrawFlag;//开始画图标志位
public:
CMyLabel(QWidget *parent = 0);
~CMyLabel();
void AddPoint(QPoint point);
void ClearAllPoint();
protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent ( QMouseEvent * event );
void mouseReleaseEvent ( QMouseEvent * event );
private:
};
#endif // CMYLABEL_H
#include "cmylabel.h"
CMyLabel::CMyLabel(QWidget *parent)
: QLabel(parent)
{
n= -1;
m_bStartDrawFlag = false;
}
void CMyLabel::paintEvent(QPaintEvent *event)
{
if (m_bStartDrawFlag)
{
QLabel::paintEvent(event);//先调用父类的paintEvent为了显示'背景'!!!
QPainter painter(this);
for (auto iter = m_listCenter.begin(); iter != m_listCenter.end(); iter++)
{
painter.setPen(QPen(Qt::red,2));
painter.drawRect(iter->x()-4, iter->y()-4, 8, 8);
}
}
}
void CMyLabel::mousePressEvent ( QMouseEvent * event )
{
if (Qt::LeftButton == event->button())
{
n = -1;
for(int i = 0; i<m_listCenter.length(); i++)
{
int x = event->x();
int y =event->y();
int nx= abs(m_listCenter[i].x()-event->x());
int ny =abs(m_listCenter[i].y() - event->y());
if (nx <=4 && ny<=4)
{
n=i;
}
}
}
}
void CMyLabel::mouseReleaseEvent ( QMouseEvent * event )
{
if (n != -1)
{
m_listCenter.replace(n, event->pos());
update();
}
}
void CMyLabel::AddPoint(QPoint point)
{
m_listCenter.push_back(point);
}
void CMyLabel::ClearAllPoint()
{
m_listCenter.clear();
}
CMyLabel::~CMyLabel()
{
}