是否可以在屏幕外呈现QWebEnginePage / QWebEngineView?

时间:2018-11-28 17:05:47

标签: qt5 qtwebengine qwebengineview qwebenginepage

我有部分工作,但是我面临一些困难:

1)看来QWebEnginePage需要一个QWebEngineView。 (请参见https://code.woboq.org/qt5/qtwebengine/src/webenginewidgets/api/qwebenginepage.cpp.html的setView()方法)

2)除非可见,否则QWebEngineView似乎不会呈现。

3)似乎没有任何方法可以检测到视图的哪些区域受到影响。

我想确认是否可以使用新的API?旧的QT WebKit API提供了一种执行此操作的方法。

1 个答案:

答案 0 :(得分:2)

是的,有可能

Scene = std::make_unique<QGraphicsScene>();
HiddenView = std::make_unique<QGraphicsView>(mScene.get());

WebView = std::make_unique<QWebEngineView>();
Scene->addWidget(mWebView.get());

WebView->resize(size); //any QSize you like
WebView->load(url); // give your url here

mWebView->show(); //this doesn't actually show, just enables you to render offscreen, see below

ImageData = QImage(size, QImage::Format_ARGB32);

connect(mWebView.get(), &QWebEngineView::loadFinished, this, &ClassA::onViewLoaded);

然后,在onViewLoaded中,我们调用update()方法以定期呈现。请注意,“这”是ClassA的对象。

void ClassA::onViewLoaded(){
        Timer = std::make_unique<QTimer>();
        connect(mTimer.get(), &QTimer::timeout, , &SpaOffscreenRender::update);
        mTimer->start(30); //every 30 miliseconds
    }

最后,您将像这样渲染:

void ClassA::update()
{
    QPainter painter(&ImageData);
    WebView->page()->view()->render(&painter);
    painter.end();
}

ImageData拥有您想要的东西:)