QGIS Plugin for viewshed does exist, you can find description :
Plugin: Viewshed Analysis
Viewshed analysis calculates visible surface from a given observer point over a digital elevation model. This plugin is native to QGIS and intended for more complex modelling, such as the depth below the visible horizon or generation of intervisibilty networks between groups of points. It is particularly performant for multiple viewshed calculations form a set of fixed points. For single point, large area viewsheds the algorithms already available in QGIS (GRASS r.los or SAGA viewshed module) would do the job.
Reference:
https://plugins.qgis.org/plugins/ViewshedAnalysis/
Youtube video:
https://youtu.be/NImNMWSswjA