8

我们正在尝试将一些应用程序从 Qt 4 移植到 Qt 5.4。Qt 5.4 有一个新的网络引擎。我们曾经使背景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);

但是此代码不适用于QWebEngineViewand QWebEnginePage。关键是它QWebEnginePage没有像setPalette.

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

4

2 回答 2

10

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);
于 2016-04-06T00:37:53.480 回答
0

不,部分解决方案已提交给上游,但它仅涵盖 QtQuick,并且您不能在顶部放置任何元素:

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

于 2015-08-11T16:03:55.633 回答