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



我有部分工作,但我面临几个困难:

1( QWebEnginePage似乎需要QWebEngineView。(请参见此处的setView((方法:https://code.woboq.org/qt5/qtwebengine/src/webenginewidgets/api/qwebenginepage.cpp.html)

2( QWebEngineView除非可见,否则不会显示为渲染。

3( 似乎没有任何手段来检测视图的哪些区域受到了影响。

我想确认这是否可能与新的API有关?旧的QT WebKit API提供了一种方法来做到这一点。

是的,有可能,

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((方法以定期进行渲染。请注意,"this"是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有你想要的:(

相关内容

  • 没有找到相关文章

最新更新