QField can record z value from NMEA sentence. Create a layer, then save as, select geometry type and flag include z-dimension.
I use it with an RTK GNSS. I collect point, lines (I have not try with area).
Create a new field in the attribute table called z and use an expression such as : Z($geometry) - (the height of pole) to calculate the z of ground.
Calculating, No. Looking up, Yes.
Pre-calculated data is available for the various Geoid models (EGM84, EGM96, EGM2008) in raster format. Here's an easy to use source:
The raster files can be imported into your db using ...