QWebEnginePage中的透明背景

Transparent Background in QWebEnginePage


问题

我们正试图将一些应用程序从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。

谁能找到解决这个问题的方法?

答案1

正如 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的不同的widget可以工作,所以透明性确实有效......只是在QWebEngineView中似乎不行。
再摆弄一下后,似乎PAGE的背景确实变得不可见了。所以我想它确实起作用了。然而,QWebEngineVIEW的背景仍然是白色的,所以它并没有什么帮助。
在你的HTML中,你是否在CSS中使用了透明背景? 像这样:body { background: transparent; } 否则,我想默认情况下HTML会有一个白色的背景。
是的,当然了。我是这么做的,正如我所说的,颜色实际上是被应用的。但它后面总是有白色。而在Qt端,QWebEngineView后面没有任何东西可能是白色的,所以一定是视图的问题。我现在已经放弃了,正在自己做浏览器网站的渲染。
在MainWindow中,我有这些:setAttribute(Qt::WA_TranslucentBackground); setAutoFillBackground(true); setWindowFlags(Qt::FramelessWindowHint); 对于view,我有这些。 webEngineView->setAttribute(Qt::WA_TranslucentBackground); webEngineView->setStyleSheet("background:transparent"); webEnginePage = webEngineView->page(); // bugreports. qt.io/browse/QTBUG-41960 webEnginePage->setBackgroundColor(Qt::transparent); 我希望这有帮助,我没有对Qt5.7进行测试,但我认为它应该以类似的方式工作。
答案2

没有。一个部分解决方案已经提交到上游,但它只涵盖了QtQuick,你不能在上面有任何元素:

https://bugreports.qt.io/browse/QTBUG-41960

相同问题还可以参考: Transparent Background in QWebEnginePage