我们正在尝试将一些应用程序从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);
我希望它有所帮助.