9

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

代码如下...

_webView = new QWebEngineView();

....

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

我收到以下错误:

“为没有窗口句柄的小部件请求共享上下文”“QOpenGLWidget:如果没有与顶层共享的上下文,就无法使用”。

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

4

2 回答 2

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();

我希望它会帮助你

于 2015-05-04T12:37:43.590 回答
5

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

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

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

于 2015-06-18T15:53:59.593 回答