To add to the excellent information given by Cassman in his response, here is a block diagram of a carrier recover loop for QPSK and QAM modems using a decision directed approach. I have detailed the decision directed phase detector in this post Phase synchronization in BPSK and this one How to correct the phase offset for QPSK I-Q data, while the block diagram below shows how it fits in a complete recovery loop (and demodulator).
The NCO puts out the complex frequency (Sine and Cosine for moving the carrier frequency offset in one direction) necessary to steer the input signal to 0 frequency (removes the carrier offset). I have more details on NCO implementations specifically here: Numerically Controlled Oscillator (NCO) for phasor implementation? and If the idea of complex frequency and "one direction" frequency shift is at all confusing, see this post: Frequency shifting of a quadrature mixed signal
The frequency setting is provided by the Loop Filter which accumulates the phase error up or down as needed to maintain the error at 0. As shown, this implementation is a Type 2 2nd Order Phase Lock Loop.
Where this block diagram below shows its use in a QAM demodulator. IF the Phase Detector just has one decision threshold instead of the 4 shown (for 16 QAM) then this will track and demodulate QPSK coherently. As Dilip has said in the comment, you do not need coherent demodulation with DQPSK but this will work in either case.
Further this works really well with Gardner Loop for timing recovery (which requires 2 samples per symbol), as The Gardner Loop is not very sensitive to carrier offsets. (While the M&M synchronizer, another common timing recovery approach is quite sensitive). The timing recovery would be ahead of the carrier recovery in the block diagram at 2 samples per symbol (or more), which is then downsampled to one sample per symbol at the sampling position in the center of the symbol for the carrier recovery implementation shown. Further details of the Gardner Loop are in this post: Gardner Timing Recovery for Repeated Sybmols. It's position in a receiver can be as done in the block diagram below, where depending on implementation it may be best to use the samples after a matched filter or before the matched filter.
This is a control loop and has a loop bandwidth that you set by the gain constants in the Loop Filter. For guidance on what Loop BW to use see this post: Loop bandwidth for symbol timing recovery. I have experimented with this specific to the Gardner and M&M recovery approaches and found that the Gardner performs best before the matched filter while the M&M performs best after, but that was specific to waveforms with raised cosine pulse shaping and different pulse shaping will impact timing recovery. Details on that comparison are given in this post: Location of Matched Filter