如何创建不可见范围,以便当用户单击近点时,将选择该点

How to create make not visible range so when user clicks near point, the point will be chosen

我有一组矢量点,每次单击我的 window 我都会将对添加到矢量中。我想在我的点上添加一个不可见的半径,这将帮助我检测是否单击了一个点。该点的大小基本上为 1 像素,因此用户无法直接点击它。我怎样才能做到这一点?我需要为此使用任何数学公式吗?

std::vector<QPoint> pointSet;

void MyWindow::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        x0 = event->x();
        y0 = event->y();
        QPoint data;
        data.setX(x0);
        data.setY(y0);
        pointSet.push_back(data);
    
    }
  //I want to be able to do it like below
  if(event->button() == Qt::RightButton)
    {
        //if(pointClicked) { cout << "point with x,y clicked"; }
    }
    update();
}

您可以创建 off-screen 位图,其大小与您的 window 相同。每当您向向量中添加一个点时,您都​​可以绘制一个颜色等于该点在向量中的索引的实心圆。然后在任何鼠标单击事件上,您可以获得单击点的颜色并到达您的矢量元素。

如果我对你的问题理解正确,你只需要运行通过你的矢量并检查是否有任何保存的点在点击点的范围内。所以这样的事情应该有效:

    if (event->button() == Qt::RightButton)
    {
        int radius = <something>
        QRectF range(event->x() - radius, event->y() - radius, radius * 2, radius * 2);

        for (auto &p in pointSet) 
        {
            if (range.contains(p)) 
            { 
                cout << "point with" << p.x() << "," << p.y() << "clicked"; 
                break;
            }
        }
    }