c++ – How do I stop a moving object when colliding with a static wall or falling to a static ground

I’m writing my very first 2D game engine in C++ and SDL2. I wrote a very simplistic RigidBody class that computes the resultant force, applies forces and simulates gravity. I also wrote a BoxCollider class and a QuadTree class which as any game dev would know manages collisions. Every thing seems to be working fine, however I’m facing a pit stop I can’t wrap my head around. How do I stop a GameObject when it collides with a static wall or ground. I tried setting the velocity to zero but that literally freezes the object and I can’t move it using my controls. Also setting the gravity to zero doesn’t stop the object since it still has a non zero velocity and it sort of digs it’s way through the ground. How can I implement this and if there are any decent tutorials regarding my question please do share them. Thanks!