使用 QWebEngine 渲染图像

Using QWebEngine to render an image

我想在我的无头渲染器中用 QWebEngine 替换 QWebKit。我使用 load() 初始化页面并将插槽连接到 loadFinished() 以生成最终的 .PNG 图像。这曾经在 WebKit 下工作正常,但在 QWebEngine.

下失败

代码如下...

_webView = new QWebEngineView();

....

// Render the HTML to an image
QPainter painter(&image);
_webView->page()->view()->render(&painter);
painter.end();

我收到以下错误:

"Asking for share context for widget that does not have a window handle" "QOpenGLWidget: Cannot be used without a context shared with the toplevel".

有没有人有使用 QWebEngine 渲染屏幕的示例?

我刚刚遇到了同样的问题,我通过在加载后显示 QWebEngineView 解决了它。

这是对我有帮助的例子: http://doc.qt.io/qt-5/qwebengineview.html#details

QWebEngineView *view = new QWebEngineView(parent);
view->load(QUrl("http://qt-project.org/"));
view->show();

希望对你有所帮助

@wlalele 的回答很有帮助,您确实需要调用 view->show(),但这不是唯一的问题。最后我不得不继承自 QWebEngineView 并覆盖事件过滤器以监视更新请求..

bool CustomWebEngine::eventFilter(QObject* object, QEvent* event)
{
    if (event->type() == QEvent::UpdateRequest)
    {
        emit updateFinished();
    }
}

只有在收到 UpdateRequest 事件后,才能保证您可以访问 view()->render 函数中的页面。