I'm looking to replace QWebKit
with QWebEngine
in my headless renderer. I initialise the page with load()
and connect a slot to loadFinished()
to generate the final .PNG image. This used to work fine with WebKit
but fails with QWebEngine
.
Code is as follows...
_webView = new QWebEngineView();
....
// Render the HTML to an image
QPainter painter(&image);
_webView->page()->view()->render(&painter);
painter.end();
I receive the following errors :
"Asking for share context for widget that does not have a window handle" "QOpenGLWidget: Cannot be used without a context shared with the toplevel".
Does anyone have an example of rendering a screen using QWebEngine
?
So the answer from @wlalele helped, you do need to call view->show(), but that wasn't the only issue. In the end I had to inherit from QWebEngineView and override the event filter to monitor for update requests..
bool CustomWebEngine::eventFilter(QObject* object, QEvent* event)
{
if (event->type() == QEvent::UpdateRequest)
{
emit updateFinished();
}
}
Only after an UpdateRequest event has been received are you guaranteed to have access to the page in the view()->render function.