\[if you can\] access squares on a grid by location then it seems unnecessary.
If you have an object slightly smaller than one square, then sure, you can access 4 cells and be done. But if you have objects much larger than a few cells, then you may have to access many cells. Quad trees can help there. Conversely if you have too many tiny objects in one cell, you also end up in trouble, but quad trees don't suffer so much from this.
So they are good for games where there isn't a very consistent size to objects. Frankly, such games are pretty rare, particuarly after applying obvious hacks, so they are hard to justify.
There are many other queries that are faster to answer with quadtrees than with cells, for example, ray casts, nearest point, support, or mass computations, so if you did a lot of that it might be worth while.
I have used quadtrees before, but in a library - I mostly wanted to avoid having to force the library users to choose any "tuning" factors, as required in a grid.