使用QWebEngine渲染图像

时间:2015-04-21 13:04:11

标签: qt headless-browser qwebkit qtwebengine

我想在无头渲染器中用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:如果没有与toplevel共享的上下文,则无法使用。”

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

2 个答案:

答案 0 :(得分:3)

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

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

                dt.AsEnumerable().ToList().ForEach(x =>
                {
                    if (checkValues2.Contains(x["Group"]))
                    {
                        newDT.ImportRow(x); //Copy
                        DT.Rows.Remove(x); //Remove
                    }
                });

我希望它能帮到你

答案 1 :(得分:2)

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

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

只有在收到UpdateRequest事件后,您才能保证能够访问view() - >渲染功能中的页面。