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++。
我有一个带有透明 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++。