Pertanyaan Latar Belakang Transparan di QWebEnginePage


Kami mencoba mem-port beberapa aplikasi dari Qt 4 ke Qt 5.4. The Qt 5.4 memiliki mesin web baru. Kami biasa membuat latar belakang QWebView dan QWebPage menjadi transparan:

view = new QWebView(this);
QPalette palette = view->palette();
palette.setBrush(QPalette::Base, Qt::transparent);
view->page()->setPalette(palette);
view->setAttribute(Qt::WA_OpaquePaintEvent, false);

Tapi kode ini tidak berfungsi QWebEngineView dan QWebEnginePage. Intinya adalah itu QWebEnginePage tidak memiliki API seperti itu setPalette.

Adakah yang bisa menemukan cara untuk memecahkan ini?


7
2018-01-28 02:45


asal


Jawaban:


Seperti yang disebutkan di https://bugreports.qt.io/browse/QTBUG-41960, ini sekarang bekerja dengan hanya menggunakan baris ini:

webEngineView->page()->setBackgroundColor(Qt::transparent);

Saya sudah mencobanya di Qt 5.6 dan itu bekerja dengan baik.

Memperbarui: Agar jawaban ini lebih bermanfaat, biarkan saya menampilkan semua kode yang relevan.

Di MainWindow, saya telah mengatur ini:

setAttribute(Qt::WA_TranslucentBackground);
setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint);

Untuk webEngineView objek, saya telah menetapkan atribut ini:

webEngineView->setAttribute(Qt::WA_TranslucentBackground);
webEngineView->setStyleSheet("background:transparent");
webEnginePage = webEngineView->page();
// https://bugreports.qt.io/browse/QTBUG-41960
webEnginePage->setBackgroundColor(Qt::transparent);

Saya harap itu membantu.


6
2018-04-06 00:37



Tidak. Sebagian solusi telah dilakukan di bagian hulu, tetapi hanya mencakup QtQuick dan Anda tidak dapat memiliki elemen apa pun di atas:

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


0
2017-08-11 16:03