C++ QWebEnginePage中的透明背景

C++ QWebEnginePage中的透明背景,c++,qt,transparent,qt5.4,qtwebengine,C++,Qt,Transparent,Qt5.4,Qtwebengine,我们正在尝试将一些应用程序从Qt4移植到Qt5.4。Qt5.4有一个新的web引擎。我们曾经将QWebView和QWebPage的背景设置为透明: view = new QWebView(this); QPalette palette = view->palette(); palette.setBrush(QPalette::Base, Qt::transparent); view->page()->setPalette(palette); view->setAttrib

我们正在尝试将一些应用程序从Qt4移植到Qt5.4。Qt5.4有一个新的web引擎。我们曾经将
QWebView
QWebPage
的背景设置为透明:

view = new QWebView(this);
QPalette palette = view->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
view->page()->setPalette(palette);
view->setAttribute(Qt::WA_OpaquePaintEvent, false);
但是此代码不适用于
QWebEngineView
QWebEnginePage
。关键是
QWebEnginePage
没有像
setpalete
这样的API


有人能找到解决方法吗?

没有。已向上游提交了部分解决方案,但它仅涵盖QtQuick,并且您不能在顶部添加任何元素:

如中所述,现在只需使用以下行即可:

webEngineView->page()->setBackgroundColor(Qt::transparent);
我在Qt5.6中试用过,效果很好

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

在主窗口中,我设置了以下内容:

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进行测试。使用另一个带有QGraphicsPacityEffect的小部件是可行的,所以透明度确实有效。。。只是没有QWebEngineView,看起来。在稍微摆弄了一下之后,页面的背景确实变得不可见了。所以我想它确实起作用了。然而,QWebEngineVIEW的背景仍然是白色的,因此它并没有起到多大的作用。在HTML中,您是否在CSS中使用了透明背景?像这样:body{background:transparent;}否则,我认为默认情况下HTML会有一个白色的背景。我这样做了,正如我所说的,颜色是实际应用的。但它的背后总是有白色的。Qt端的QWebEngineView后面没有白色的东西,所以它一定是视图。A现在已经放弃了,我自己做浏览器站点的渲染;setAutoFillBackground(真);setWindowFlags(Qt::FramelessWindowHint);对于视图,我有以下内容:webEngineView->setAttribute(Qt::WA_半透明背景);webEngineView->setStyleSheet(“背景:透明”);webEnginePage=webEngineView->page();//webEnginePage->setBackgroundColor(Qt::透明);我希望它有帮助,我还没有针对Qt5.7进行测试,但我认为它应该以类似的方式工作。