Мы пытаемся портировать какое-то приложение с Qt 4 на Qt 5.4. В Qt 5.4 появился новый веб-движок. Мы привыкли делать фон 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
не имеет такого API, как setPalette
,
Может кто-нибудь найти способ решить эту проблему?
Как уже упоминалось в 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, и у вас не может быть никаких элементов сверху: