Are pulse shaping and windowing functions the same in concept?
Windowing and pulse shaping are very similar, and are implemented in similar ways, but their purposes are different.


Windowing means multiplying a discrete signal by a pulse with certain spectral properties before calculating its Fourier transform. The purpose is reducing the effect of discontinuities at both ends of the discrete signal.
In QAM and related digital signals, the information is transmitted in the amplitudes of a sequence of pulses. Pulse shaping means choosing a pulse with the desired spectral and orthogonality properties.


Note that some digital communications textbooks assume (many times implicitly) a rectangular pulse shape, which is then converted to another pulse shape (using a filter, as in the example in your question). In my opinion, this formulation is unncecessarily complex -- it is better to explicity select  a pulse shape from the start.

Note also that pulse shaping may be understood as the convolution of a stream of deltas with a pulse shape; in that sense, pulse shaping is a sort of "dual" of windowing.