Прозрачный фон в 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.

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


person TerryLu    schedule 28.01.2015    source источник


Ответы (2)


Как указано в 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);

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

person Jake W    schedule 06.04.2016
comment
К сожалению, это вообще не работает. Когда я использую этот код в webEngineView, который находится внутри прозрачного окна (для отображения поверх другого окна), фон веб-сайта, который не содержит ничего, кроме div с текстом, остается белым. Протестировано с Qt 5.7. Использование другого виджета с QGraphicsOpacityEffect на нем работает, поэтому прозрачность работает ... но, похоже, не с QWebEngineView. - person TheSHEEEP; 28.02.2017
comment
Немного повозившись, кажется, что фон СТРАНИЦЫ действительно становится невидимым. Так что я думаю, это работает. Однако фон QWebEngineVIEW остается белым, так что на самом деле это мало помогает. - person TheSHEEEP; 28.02.2017
comment
В своем HTML вы использовали прозрачный фон в своем CSS? вот так: тело { фон: прозрачный; } в противном случае я думаю, что по умолчанию HTML будет иметь белый фон. - person Jake W; 28.02.2017
comment
Да, конечно. Я сделал это, и, как я уже сказал, цвет действительно применяется. Но за ним всегда стоит белый. И за QWebEngineView на стороне Qt нет ничего, что могло бы быть белым, так что это должно быть представление. К настоящему времени я отказался от этого и сам делаю рендеринг сайта в браузере. - person TheSHEEEP; 28.02.2017
comment
В MainWindow у меня есть это: setAttribute(Qt::WA_TranslucentBackground); установитьAutoFillBackground (истина); setWindowFlags(Qt::FramelessWindowHint); Для просмотра у меня есть: webEngineView-›setAttribute(Qt::WA_TranslucentBackground); webEngineView-›setStyleSheet(фон:прозрачный); webEnginePage = webEngineView-›page(); // bugreports.qt.io/browse/QTBUG-41960 webEnginePage-›setBackgroundColor( Qt::прозрачный); Я надеюсь, что это поможет, я не тестировал Qt5.7, но я думаю, что это должно работать аналогичным образом. - person Jake W; 28.02.2017
comment
@TheSHEEEP Я также обновил ответ, указав лучший формат кода. - person Jake W; 28.02.2017
comment
Очень интересно. Я определенно пробовал эти точные настройки, но это не сработало. Однако теперь это произошло. Разница заключалась в том, что я устанавливал Qt::transparent ПОСЛЕ загрузки страницы, а вы устанавливали его перед загрузкой страницы. Кажется, в этом вся разница (я могу воспроизвести такое поведение). По-видимому, Qt использует этот параметр для создания фона страницы, но не будет касаться его снова, если он будет изменен впоследствии. - person TheSHEEEP; 01.03.2017
comment
Чтобы закончить это обсуждение: я сообщил об этом как об ошибке в Qt: bugreports.qt.io/browse/ QTBUG-59216 - person TheSHEEEP; 01.03.2017

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

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

person Siana    schedule 11.08.2015