前言
自定义可拖动多边形控件,原创作者是赵彦博(QQ:408815041 zyb920@hotmail.com),创作之初主要是为了能够在视频区域内用户自定义可拖动的多个区域,即可用来作为警戒区域,也可用来其他的处理,拿到对应的多边形坐标集合,本控件的主要难点是如何计算一个点在一个多边形区域内,何时完成一个多边形区域,支持多个多边形。
实现的功能
- 1:自定义随意绘制多边形
- 2:产生闭合形状后可单击选中移动整个多边形
- 3:可拉动某个点
- 4:支持多个多边形
- 5:鼠标右键退出绘制
- 6:可设置各种颜色
效果图
头文件代码
#ifndef CUSTOMGRAPHICS_H
#define CUSTOMGRAPHICS_H
/**
* 自定义多边形控件 作者:赵彦博(QQ:408815041 zyb920@hotmail.com) 2019-3-28
* 1:自定义随意绘制多边形
* 2:产生闭合形状后可单击选中移动整个多边形
* 3:可拉动某个点
* 4:支持多个多边形
* 5:鼠标右键退出绘制
* 6:可设置各种颜色
*/
#include <QWidget>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif
class QDESIGNER_WIDGET_EXPORT CustomGraphics : public QWidget
#else
class CustomGraphics : public QWidget
#endif
{
Q_OBJECT
Q_PROPERTY(bool selectDotVisible READ getSelectDotVisible WRITE setSelectDotVisible)
Q_PROPERTY(int dotRadius READ getDotRadius WRITE setDotRadius)
Q_PROPERTY(int lineWidth READ getLineWidth WRITE setLineWidth)
Q_PROPERTY(QColor dotColor READ getDotColor WRITE setDotColor)
Q_PROPERTY(QColor lineColor READ getLineColor WRITE setLineColor)
Q_PROPERTY(QColor polygonColor READ getPolygonColor WRITE setPolygonColor)
Q_PROPERTY(QColor selectColor READ getSelectColor WRITE setSelectColor)
public:
typedef struct {
QVector<QPoint> pos;
bool selected;
} Polygon;
explicit CustomGraphics(QWidget *parent = 0);
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void paintEvent(QPaintEvent *);
void drawPolygon(QPainter *p, const Polygon &v);
void drawLines(QPainter *p, const QList<QPoint> &list, bool isFirst = true);
private:
bool selectDotVisible; //选中点可见
int dotRadius; //点的半径
int lin