Sorry, should have been more clear about this point:
I have the "same" rendering code successfully running in webassembly (https://sgsaenger.github.io/vipster/emscripten/), so it should be more or less correct.
This standalone app obtains canvas and webgl2 context via the emscripten helper functions, so glGetString(GL_VERSION) reports OpenGL ES 3.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium)) as expected.
Note the weird mismatch in OpenGL ES 2.0 (WebGL 2.0 (OpenGL ES 3.0 Chromium)) when Qt is doing its initialization first.
My guess is that somewhere there's a conflict between my setup code (or expectations) and what Qt is doing before initGL() is reached.
Is there maybe any working GLES3 QOpenGLWidget examples?