Прозрачный фон в QWebEnginePage

Мы пытаемся портировать какое-то приложение с 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,

Может кто-нибудь найти способ решить эту проблему?

7

Решение

Как уже упоминалось в 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);

Я надеюсь, что это помогает.

6

Другие решения

Нет. Частичное решение предназначено для апстрима, но оно охватывает только QtQuick, и у вас не может быть никаких элементов сверху:

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

0

По вопросам рекламы [email protected]