QPainterPath判断点是否在路径内

QPainterPath判断给定点是否在路径内是通过contains方法进行判断,该例子中判断鼠标移动点位生效需要添加setMouseTracking(true)方法。以下为具体实现:

 1 #include <QPainter>
 2 #include <QMouseEvent>
 3 #include <QDebug>
 4 Widget::Widget(QWidget *parent)
 5     : QWidget(parent)
 6 {
 7     setMouseTracking(true);
 8 }
 9 
10 Widget::~Widget()
11 {
12 
13 }
14 
15 static QPainterPath path;
16 static QString strShow="not init";
17 void Widget::paintEvent(QPaintEvent *event)
18 {
19     Q_UNUSED(event);
20 
21     QPainter painter(this);
22     painter.fillRect(this->rect(),QBrush(QColor(255,255,255)));
23     painter.setRenderHint(QPainter::Antialiasing,true);//抗锯齿
24 
25     QRect rt(this->width()/2-100,this->height()/2-50,200,100);
26     painter.fillRect(this->rect(),QBrush(QColor(0,0,0)));
27     painter.fillRect(rt,QBrush(QColor(0,255,0,100),Qt::BrushStyle::Dense6Pattern));
28 
29     path = QPainterPath();
30     path.addEllipse(this->rect());
31     painter.setPen(QColor(255,0,0));
32     painter.drawPath(path);
33 
34     painter.setFont(QFont("New Roman",30,30,false));
35     painter.drawText(rt,Qt::AlignCenter,strShow);
36 }
37 
38 void Widget::mouseMoveEvent(QMouseEvent *event)
39 {
40     if(path.contains(event->pos()))
41     {
42         qDebug()<<"in";
43         strShow = "in";
44     }
45     else
46     {
47         qDebug()<<"out";
48         strShow = "out";
49     }
50     update();
51 }

路径命中

posted @ 2026-01-29 14:43  左边的翼  阅读(3)  评论(0)    收藏  举报