使用QWebEngine渲染图像

Ric*_*ams 8 qt headless-browser qwebkit qtwebengine

我想QWebKitQWebEngine无头渲染器代替.我初始化页面load()并连接一个插槽loadFinished()以生成最终的.PNG图像.这曾经工作得很好,WebKit但失败了QWebEngine.

代码如下......

_webView = new QWebEngineView();

....

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

我收到以下错误:

"请求没有窗口句柄的窗口小部件的共享上下文""QOpenGLWidget:如果没有与toplevel共享的上下文,则不能使用".

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

小智 5

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

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

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

我希望它会帮助你


Ric*_*ams 5

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

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

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

  • 嗨理查德,请你能提供更多关于你如何解决这个问题的信息吗?我们正在用头撞墙! (2认同)