我在QGraphicsWebview
内有一个透明的QGraphicsView
,其中包含以下设置:
QGraphicsView
是高级窗口小部件,以全屏模式显示QGLWidget
作为其视图端口(使用opengl-es)
graphicsView->setStyleSheet("background:transparent")
QPalette::Base
和QPalette::Window
组合以及webview->page()
设置为Qt::transparent
一开始,透明度工作正常。但随着屏幕的更新(当我滚动),看起来新的位图在现有的位图之上混合以获得叠加的图片。大约5-6次屏幕更新后,此混合会导致颜色累积并形成不透明的矩形(图像损坏)。以下图像显示了问题的第一,第二和最后阶段。
如何告诉qt / opengl停止混合并将新图像绘制到帧缓冲区?
我尝试从重写的Webview :: paint和GraphicsView :: paintEvent调用fillRect(boundRect(), Qt::transparent)
;但除了让更新变慢之外,它没有用。
我是Qt和OpenGl的新手,所以我可能会遗漏一些基本的标志或设置。
答案 0 :(得分:1)
我尝试了上面提到的所有方法。他们不适合我。然后我调试到qtbase代码,发现设置不透明度级别使顶层浏览器层透明。
这 - > setOpacity(0.1);
此指针指向QGraphicsWebView对象。
使用此方法,包括背景在内的整个前端浏览器内容将是透明的。要分隔标题,段落和背景并为它们指定不同的透明级别,我将不得不深入研究webkit代码以找出问题。但是现在,setOpacity()完成了这个技巧并且对我正在做的事情已经足够了。
答案 1 :(得分:0)
事实证明问题是graphicsView->setStyleSheet("background:transparent");
。谁会想到?!
是的,我认为使透明度工作的路线实际上导致了透明度方面的麻烦。该应用程序在没有该行的情况下工作正常(或者如果您将其更改为background:none
)
简而言之,是使用QGLWidget获取透明QGraphicsWebview的步骤:
QGraphicsWebview
,QWebpage
和外QGraphicsView
的基本调色板设置为Qt::transparent
scene->setBackgroundBrush(QBrush(Qt::transparent));
您还应确保将html正文背景设置为透明值:
html, body {
background-color: rgba(127, 127, 0, 0.5);
}