首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >透明的QGraphicsWebview在QGLWidget上导致叠加图像

透明的QGraphicsWebview在QGLWidget上导致叠加图像
EN

Stack Overflow用户
提问于 2014-11-05 11:03:58
回答 2查看 950关注 0票数 1

我在一个具有以下设置的QGraphicsWebview中有一个透明的QGraphicsView

  • QGraphicsView是高级小部件,以全屏模式显示。
  • 图形视图使用QGLWidget作为其视图端口(使用opengl-es) 。
    • 在此QGLWidget中启用了阿尔法通道和双缓冲。

  • 透明度是由graphicsView->setStyleSheet("background:transparent")实现的
  • 为QGraphicsView和QGraphicsWebview 设置了以下属性
    • WA_TranslucentBackground =真
    • WA_NoSystemBackground =真
    • WA_OpaquePaintEvent = false

  • webview和webview->page()QPalette::Windowwebview->page()画笔被设置为Qt::transparent

一开始,透明度是很好的。但是随着屏幕的更新(当我滚动),看起来新的位图被混合在现有的位图之上,以得到一张叠加的图片。在大约5-6个屏幕更新后,这种混合会导致颜色积累并形成一个不透明的矩形(带有损坏的图像)。下面的图片显示了问题的第一、第二和最后阶段。

我如何告诉qt/opengl停止混合,只需将新图像绘制到帧缓冲区?我试着从重写的Webview::fillRect(boundRect(), Qt::transparent)和GraphicsView::paintEvent调用,但是它没有工作,只是使更新速度变慢了。

我是Qt和OpenGl新手,所以我可能缺少一些基本标志或设置。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-10 09:03:22

结果发现问题是graphicsView->setStyleSheet("background:transparent");。谁会猜到呢!

是的,我以为让透明度奏效的那句话实际上给透明度带来了麻烦。该应用程序在没有该行的情况下运行良好(或者如果您将其更改为background:none)

简而言之,使用QGraphicsWebview获取透明QGLWidget的步骤:

  • QGraphicsWebviewQWebpage和外部QGraphicsView的基本调色板设置为Qt::transparent
  • scene->setBackgroundBrush(QBrush(Qt::transparent));

还应确保将html正文背景设置为透明值:

代码语言:javascript
复制
html, body {
  background-color: rgba(127, 127, 0, 0.5);
}
票数 0
EN

Stack Overflow用户

发布于 2015-03-14 21:43:15

我尝试了上面提到的所有方法。他们不是为我工作的。然后,我在qtbase代码中进行了调试,发现设置不透明度级别可以使顶层浏览器层透明。

这->setOpacity(0.1);

此指针指向QGraphicsWebView对象。

使用这种方法,包括后台在内的整个前端浏览器内容将是透明的。为了分离标题、段落和背景,并为它们指定不同的透明级别,我将进一步挖掘webkit代码来解决问题。但就目前而言,setOpacity()做到了这一点,对我所做的工作来说已经足够好了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26755619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档