Qt透明QWebView:过去的页面留在新页面的背景中

Qt transparent QWebView: past page stay in background of new one

我有一个带有透明 QWebView 的小应用程序显示一些 HTML 页面(它们都有一个样式="background-color: transparent;" 属性 在正文上)在 QTabWidget 上使用字体。

透明效果正常,我可以在 QWebView 的内容旁边看到 QTabWidget 的字体。但是当我在 QWebView 中加载另一个页面时,旧页面在新页面的背景中仍然可见。就像页面只是一层一层地排列而不是关闭一样。

我不知道如何摆脱这种行为,也不知道它从何而来!

我最近在使用 QtJambi 时遇到了类似的问题。我加载的页面是动态的(带有 javascript 和 css3 的动画)并且每次某些组件移动或更改时,网络视图都会绘制新的渲染而不清除旧的渲染。

我今天找到了解决办法。我写了一个class继承自QWebView,在paintEvent方法中将背景设置为透明。每次重新绘制 Web 视图时,背景都会设置为透明。

这是我的 Java 代码

    public class WebBrowserTestQWebView extends QWebView
{
    @Override
    public void paintEvent(QPaintEvent event)
    {
        QPalette palette = this.palette(); 
        palette.setBrush(QPalette.ColorRole.Base, new QBrush(new QColor(Qt.GlobalColor.transparent)));
        this.setPalette(palette); 
        this.setAttribute(Qt.WidgetAttribute.WA_OpaquePaintEvent, false);
        super.paintEvent(event); 
    }
}

我猜它也适用于 C++。