【发布时间】:2014-11-05 11:03:58
【问题描述】:
我在QGraphicsView 中有一个透明的QGraphicsWebview,具有以下设置:
-
QGraphicsView是高级小部件,以全屏模式显示 - 图形视图使用
QGLWidget作为其视图端口(使用opengl-es)- 在这个 QGLWidget 中启用了 Alpha 通道和双缓冲
- 透明度由
graphicsView->setStyleSheet("background:transparent")实现 - 为 QGraphicsView 和 QGraphicsWebview 设置了以下属性
- WA_TranslucentBackground = true
- WA_NoSystemBackground = true
- WA_OpaquePaintEvent = 假
- webview和
webview->page()的QPalette::Base和QPalette::Window画笔设置为Qt::transparent
一开始,透明度工作正常。但是随着屏幕的更新(当我滚动时),看起来新的位图混合在现有的位图之上以获得叠加的图片。在大约 5-6 次屏幕更新后,这种混合会导致颜色累积并形成一个不透明的矩形(带有损坏的图像)。以下图片显示了问题的第一、第二和最后阶段。
如何告诉 qt/opengl 停止混合并将新图像绘制到帧缓冲区?
我尝试从覆盖的 Webview::paint 和 GraphicsView::paintEvent 调用fillRect(boundRect(), Qt::transparent);但它除了让更新变慢之外没有用。
我是 Qt 和 OpenGL 的新手,所以我可能会遗漏一些基本的标志或设置。
【问题讨论】:
标签: qt opengl opengl-es qgraphicsview qwebview