我在一个具有以下设置的QGraphicsWebview中有一个透明的QGraphicsView:
QGraphicsView是高级小部件,以全屏模式显示。QGLWidget作为其视图端口(使用opengl-es) 。
graphicsView->setStyleSheet("background:transparent")实现的
webview->page()的QPalette::Window和webview->page()画笔被设置为Qt::transparent一开始,透明度是很好的。但是随着屏幕的更新(当我滚动),看起来新的位图被混合在现有的位图之上,以得到一张叠加的图片。在大约5-6个屏幕更新后,这种混合会导致颜色积累并形成一个不透明的矩形(带有损坏的图像)。下面的图片显示了问题的第一、第二和最后阶段。
我如何告诉qt/opengl停止混合,只需将新图像绘制到帧缓冲区?我试着从重写的Webview::fillRect(boundRect(), Qt::transparent)和GraphicsView::paintEvent调用,但是它没有工作,只是使更新速度变慢了。
我是Qt和OpenGl新手,所以我可能缺少一些基本标志或设置。

发布于 2014-11-10 09:03:22
结果发现问题是graphicsView->setStyleSheet("background:transparent");。谁会猜到呢!
是的,我以为让透明度奏效的那句话实际上给透明度带来了麻烦。该应用程序在没有该行的情况下运行良好(或者如果您将其更改为background:none)
简而言之,使用QGraphicsWebview获取透明QGLWidget的步骤:
QGraphicsWebview、QWebpage和外部QGraphicsView的基本调色板设置为Qt::transparentscene->setBackgroundBrush(QBrush(Qt::transparent));还应确保将html正文背景设置为透明值:
html, body {
background-color: rgba(127, 127, 0, 0.5);
}发布于 2015-03-14 21:43:15
我尝试了上面提到的所有方法。他们不是为我工作的。然后,我在qtbase代码中进行了调试,发现设置不透明度级别可以使顶层浏览器层透明。
这->setOpacity(0.1);
此指针指向QGraphicsWebView对象。
使用这种方法,包括后台在内的整个前端浏览器内容将是透明的。为了分离标题、段落和背景,并为它们指定不同的透明级别,我将进一步挖掘webkit代码来解决问题。但就目前而言,setOpacity()做到了这一点,对我所做的工作来说已经足够好了。
https://stackoverflow.com/questions/26755619
复制相似问题