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(); }
######################
QQ 3087438119