сам задал, сам и отвечу, может поможет кому:
QPointF GraphicsView::nodeBy(QPointF p, int gridStep)
{
int X = p.x();
int Y = p.y();
X = X % gridStep;
if (X <= gridStep/2)
X = p.x() - X;
else
X = p.x() + gridStep - X;
Y = Y % gridStep;
if (Y <= gridStep/2)
Y = p.y() - Y;
else
Y = p.y() + gridStep - Y;
return QPointF(X, Y);
}
В функцию передается позиция курсора и значение сетки. Возвращается ближайший узел.