If you've got access to Simulink, Dick Benson of Mathworks has written some pretty nice models showing how to perform symbol timing/carrier recovery of QPSK in the face of various impairments.
Pretty much the standard text in this area is 'Digital Communication Receivers: Synchronization, channel estimation, and signal processing' by Meyer. The symbol timing error estimator on pp. 289-295 can be used in conjunction with a loop filter and fractional delay filter to correct for symbol timing, and from here it's pretty simple to correct for carrier offset.