【问题标题】:Using QWebEngine to render an image使用 QWebEngine 渲染图像
【发布时间】:2015-06-28 15:55:48
【问题描述】:

我希望在我的无头渲染器中将 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 渲染屏幕的例子吗?

【问题讨论】:

    标签: qt headless-browser qwebkit qtwebengine


    【解决方案1】:

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

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

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 嗨,Richard,您能否提供更多有关您如何解决此问题的信息?我们正在用头撞墙!
      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多