首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在屏幕外呈现QWebEnginePage/QWebEngineView?

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

Stack Overflow用户
提问于 2018-11-28 17:05:47
回答 1查看 1.2K关注 0票数 6

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

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

2)除非QWebEngineView是可见的,否则它不会呈现。

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

我想确认一下,这是否可能与新的API有关?旧的QT提供了一种这样做的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-23 21:23:48

是的,有可能,

代码语言:javascript
复制
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的一个对象。

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

最后你这样呈现:

代码语言:javascript
复制
void ClassA::update()
{
    QPainter painter(&ImageData);
    WebView->page()->view()->render(&painter);
    painter.end();
}

ImageData有您想要的东西:)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53524652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档