2015-01-28 4 views
5

Мы пытаемся перенести приложение с Qt 4 на Qt 5.4. Qt 5.4 имеет новый веб-движок. Мы использовали, чтобы сделать фон QWebView и QWebPage быть прозрачным:Прозрачный фон в QWebEnginePage

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.

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

ответ

5

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

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

+0

К сожалению, это не работает вообще. Когда я использую этот код в webEngineView, который находится внутри прозрачного окна (для отображения поверх другого окна), фон веб-сайта, который содержит ничего, кроме div с текстом, остается белым. Протестировано с Qt 5.7. Использование другого виджета с QGraphicsOpacityEffect на нем работает, поэтому прозрачность работает ... просто не с QWebEngineView, похоже. – TheSHEEEP

+0

После того, как поиграть немного больше, кажется, что фон PAGE действительно становится невидимым. Поэтому я думаю, что это сработает. Однако фон QWebEngineVIEW остается белым, поэтому он не очень помогает. – TheSHEEEP

+0

В вашем HTML вы использовали прозрачный фон в своем CSS? примерно: body { фон: прозрачный; } в противном случае, я думаю, что по умолчанию HTML будет иметь белый фон. –

 Смежные вопросы

  • Нет связанных вопросов^_^