使用 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 函数中的页面。
我想在我的无头渲染器中用 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 函数中的页面。