QWebEnginePage中的透明背景

9
我们正在尝试将一些应用程序从Qt 4迁移到Qt 5.4。Qt 5.4有一个新的Web引擎。我们过去习惯于使QWebViewQWebPage的背景透明:
view = new QWebView(this);
QPalette palette = view->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
view->page()->setPalette(palette);
view->setAttribute(Qt::WA_OpaquePaintEvent, false);

但是这段代码不适用于 QWebEngineViewQWebEnginePage。问题在于 QWebEnginePage 没有像 setPalette 这样的 API。
有人能找到解决方法吗?
2个回答

12

https://bugreports.qt.io/browse/QTBUG-41960中所述,现在只需使用以下一行代码即可解决问题:

webEngineView->page()->setBackgroundColor(Qt::transparent);

我在Qt 5.6中尝试过,效果很好。

更新: 为了使这个答案更有帮助,让我展示所有相关的代码。

在MainWindow中,我设置了这个:

setAttribute(Qt::WA_TranslucentBackground);
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint);

对于webEngineView对象,我已经设置了以下属性:

webEngineView->setAttribute(Qt::WA_TranslucentBackground);
webEngineView->setStyleSheet("background:transparent");
webEnginePage = webEngineView->page();
// https://bugreports.qt.io/browse/QTBUG-41960
webEnginePage->setBackgroundColor(Qt::transparent);

不幸的是,这根本不起作用。当我在透明窗口中(以显示在另一个窗口的顶部)使用此代码的WebEngineView时,仅包含文本div的网站的背景仍然是白色的。在Qt 5.7中进行了测试。使用具有QGraphicsOpacityEffect的不同小部件可以工作,因此透明度确实起作用...似乎只是与QWebEngineView不兼容。 - TheSHEEEP
经过一番摸索,似乎页面的背景确实变得无形了。所以我想它应该是有效的。然而,QWebEngineVIEW 的背景仍然是白色,所以并没有太大帮助。 - TheSHEEEP
是的,当然。我做了那件事,就像我所说的,颜色实际上被应用了。但它总是有白色的背景。在Qt侧的QWebEngineView后面没有什么可以是白色的东西,所以必须是视图本身。现在我放弃了它,并且正在自己渲染浏览器站点。 - TheSHEEEP
1
在MainWindow中,我有这个: setAttribute(Qt :: WA_TranslucentBackground); setAutoFillBackground(true); setWindowFlags(Qt :: FramelessWindowHint); 对于视图,我有这些: webEngineView->setAttribute(Qt :: WA_TranslucentBackground); webEngineView->setStyleSheet("background:transparent"); webEnginePage = webEngineView->page(); // https://bugreports.qt.io/browse/QTBUG-41960 webEnginePage->setBackgroundColor(Qt :: transparent); 希望这可以帮到你,我还没有针对Qt5.7进行测试,但我认为它应该以类似的方式工作。 - Jake W
结束这个讨论:我在Qt上报告了这个错误:https://bugreports.qt.io/browse/QTBUG-59216 - TheSHEEEP
显示剩余3条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接