Hi Siraj,
Diagrams of Costas loops are different and reflects different rx structures. For demo purposes use the easiest one.
work on control loops is no small job though you can readily see a diagram and follow it but you will need weeks of work to get the loop tuned.
The second step is to use actual qpsk signal from your tx and pass through your rx until you get the constellations.
To keep your test structure simple I suggest you:
1)generate random qpsk
2) pass through rrc upsampling by 2 or higher
3) mix with a frquency
4) keep it complex to rx (so you don't require lpf if you wish)
5) downconvert inside the costas loop using your basic slicer
6) after the loop(outside it) apply rrc again decimating by 2.
plot(I,Q,'.')
you should get clean constellations if your loop gets fc it to dc
else it will be circle.
When you decimate, you will have two output phases to choose. watch both
you will spend a lot of time to tune the loop controlling it through various loop filters and error sense and scaling.