Qt判断点在多边形内还是多边形外

 

 

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QPolygonF>
#include <QPoint>
#include <QMouseEvent>
#include <QMessageBox>

class PolygonWidget : public QWidget
{
public:
    PolygonWidget(QWidget *parent = nullptr) : QWidget(parent)
    {
        // 定义一个闭合的QPolygonF
        polygon.append(QPointF(50, 50));
        polygon.append(QPointF(150, 50));
        polygon.append(QPointF(150, 150));
        polygon.append(QPointF(50, 150));
    }

protected:
    void paintEvent(QPaintEvent *event) override
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        // 绘制多边形
        painter.setBrush(Qt::lightGray);
        painter.drawPolygon(polygon);

        // 绘制一个示例点
        QPoint examplePoint(100, 100);
        painter.setPen(Qt::red);
        painter.drawEllipse(examplePoint, 3, 3);

        // 检查点是否在多边形内
        if (polygon.containsPoint(examplePoint))
        {
            painter.setPen(Qt::green);
            painter.drawText(examplePoint + QPoint(10, 10), "Inside");
        }
        else
        {
            painter.setPen(Qt::red);
            painter.drawText(examplePoint + QPoint(10, 10), "Outside");
        }
    }

    void mousePressEvent(QMouseEvent *event) override
    {
        // 检查鼠标点击位置是否在多边形内
        if (polygon.containsPoint(event->pos()))
        {
            QMessageBox::information(this, "Point Check", "The point is inside the polygon.");
        }
        else
        {
            QMessageBox::information(this, "Point Check", "The point is outside the polygon.");
        }

        // 重新绘制以显示新信息
        update();
    }

private:
    QPolygonF polygon;
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    PolygonWidget widget;
    widget.resize(200, 200);
    widget.show();

    return app.exec();
}

 

 

######################

posted @ 2024-12-29 23:59  西北逍遥  阅读(76)  评论(0)    收藏  举报