i couldnt understand what u meant by native surface creation
Both Qt and OpenGL draw to OS provided surfaces e.g. a window identified by a window handle (HWND). Because of reasons I won't get into here your main window and QOpenGLWidget don't share that resource but create one for each and composite them over one other (well, not necessarily true, but lets keep it simple). Creating those underlying surfaces is relatively costly (in terms of memory consumption, system resources and speed), so when you create a widget it doesn't immediately allocate them. It is deferred to the moment a widget is actually made visible. Until that time a geometry of a widget is unspecified. You can explicitly call e.g. setGeometry or resize, which do record a desired size, but that still doesn't allocate the native surface until the widget is made visible.
I mean I am not querying it explicitly, The resizeGL() function is never called explicitly and is always called by the Qt framework
Both code snippets you've shown set up the widgets in the main window constructor, so they are shown at the same time and there is only one call to resizeGL from the show() call of MainWindow. That shouldn't exhibit the behavior you describe, so there must be something else you're doing and not showing here. In your callstack window right click anywhere and from the context menu tell it to show external code. It will show you what in your main() is calling resizeGL.