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

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

本文关键字:停留在 新页面 背景 QWebView 过去 Qt 透明      更新时间:2023-10-16

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

透明度正在发挥作用,我可以在QWebView的内容旁边看到我的QTabWidget字体。但是,当我在QWebView中加载另一个页面时,旧页面在新页面的背景中仍然可见。就像页面只是一页一页地排列,没有关闭一样。

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

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

我今天找到了一个解决方案。我编写了一个继承自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++。