With normal caveats regarding "threads" (web workers in web parlance) you could just run your data simulation in a thread and then use the main thread to update your VBO and render.
@agocs hmmm, I tried doing that, inserting makeCurrent(), but that didn't change anything. Still get a black screen.
btw, when I deactivate drawOffScreen(), only calling drawScreen() it gives me scrambled data (undefined) on the screen, where I would expect to see a white quad, because of glColor4f(1.0f, 1.0f, 1.0f, 1.0f); in drawScreen()
I'm not an expert in the field. Maybe this example code can help you: https://qt.gitorious.org/qt/qtdeclarative/source/15e58df3386b5438f6ae114a51ad4a258085e70b:examples/quick/scenegraph/shared/logorenderer.cpp
The whole example can be found here: http://doc.qt.io/qt-5/qtquick-scenegraph-textureinthread-example.html