我想在无头渲染器中用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
渲染屏幕的示例?
答案 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() - >渲染功能中的页面。