我们正试图将一些应用程序从Qt 4移植到Qt 5.4。Qt 5.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
没有像 setPalette
那样的API。
谁能找到解决这个问题的方法?
正如 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);
没有。一个部分解决方案已经提交到上游,但它只涵盖了QtQuick,你不能在上面有任何元素: