How to use matlab toolbox for 2qam dfe equalizer?
From the MATLAB documentation (https://uk.mathworks.com/help/comm/ref/comm.decisionfeedbackequalizer-system-object.html): "The equalizer uses the reference tap location to track the main energy of the channel". The equalizer object has a property called the reference tap which has default value of one. Looking at your channel coefficients, it looks like the tap with the main energy is the second tap so you should set eq.ReferenceTap = 2.

You can also work on choosing an appropriate step size. The equalizer returns the error signal back, you call it e, you can plot that and use it as a guide to pick a step size. You can also use the in-built function maxstep which gives you the maximum step size needed for a LMS-like algorithm to converge.

Last suggestion I have is unrelated but when calling awgn and the input is real, then the function does not add complex noise so your noise will only appear in the in-phase/real axis. You can get around it just by creating your own complex noise, or by specifying the input as complex with imaginary part equal to zero: r = awgn(complex(filter(h, 1, x), zeros(size(x))), SNR_dB, 'measured').

Edit

The OP is still having issues so I will add the settings that I use to get results.

eq = comm.DecisionFeedbackEqualizer;
eq.Constellation = qammod(0:MQAM-1, MQAM);
[~, eq.ReferenceTap] = max(h);
eq.StepSize = maxstep(eq, r)/2; % maxstep returns largest so choose something smaller to be safe


And here are the resulting error signal and before/after constellation plot.