QWebEnginePage中的透明背景

时间:2015-01-28 02:46:00

标签: c++ qt transparent qt5.4 qtwebengine

我们正在尝试将一些应用程序从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 个答案:

答案 0 :(得分:6)

正如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);

我希望它有所帮助。

答案 1 :(得分:0)

没有。部分解决方案已经提交到上游,但它仅涵盖QtQuick,并且您无法在顶部拥有任何元素:

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