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

时间:2016-05-06 14:12:29

标签: c++ qt transparency qwebview

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

透明度正常,我可以在 QWebView 的内容旁边看到 QTabWidget 的字体。但是当我在 QWebView 中加载另一个页面时,旧的页面仍然可以在新的页面中看到。就好像这些页面只是一个在另一个上面排列而不是关闭。

我不知道如何摆脱这种行为以及它可能来自哪里!

1 个答案:

答案 0 :(得分:0)

我最近和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 ++。