我们正在尝试将一些应用程序从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。
有人能找到解决这个问题的方法吗?
答案 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,并且您无法在顶部拥有任何元素: