首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsPathItem重叠半透明路径变得更加不透明

QGraphicsPathItem重叠半透明路径变得更加不透明
EN

Stack Overflow用户
提问于 2016-09-02 05:24:48
回答 2查看 390关注 0票数 3

我用QGraphicsPathItems绘制半透明路径,但当两条路径重叠时,它们变得更加不透明,但我希望它们保持相同的透明度,不管有多少条路径重叠。

在左边两条独立的路径上,变得更加不透明。在右边,一条路越过自己,同样的透明度,这就是我想用几条路达到的效果。

有可能实现这样的目标吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-17 07:29:26

回到这个问题后,对我来说,最后的解决方案是使用确实的CompositionMode,精确的QPainter::CompositionMode_Multiply,但我的错误是,我有阿尔法在使用的颜色。使用上面提到的CompositionMode和没有alpha的颜色,我得到了我想要的结果。

票数 0
EN

Stack Overflow用户

发布于 2016-09-04 10:23:48

我搜索了一下Qt是否具有真正的不透明度分层,并在Andreas Aardal Hanssen的Qt博客中找到了一篇文章:

https://blog.qt.io/blog/2009/04/23/layered-rendering-part-2-it-helps-solve-many-problems/

他说,唯一的办法是使用屏幕外渲染。

通过将“绿色子树”呈现到一个单独的层中,我们可以将所有的项目组合在一起,并应用一个统一的不透明度作为将这些项目组合在一起的一部分。在我的上一个博客中,我写了关于屏幕外渲染的文章。这项工作已经取得进展,并且处于相当有用的状态(尽管代码非常难看)。它起作用了!与上述应用程序相同的呈现输出如下所示。

到屏幕外呈现解决方案的链接是https://blog.qt.io/blog/2009/02/27/braindump-graphics-view-and-the-joys-of-off-screen-rendering

我认为您的想法是,您将每一层分别呈现为一个像素映射。该层中的项目相对于彼此而言是不透明的。然后,以相对于彼此的透明度呈现这些层本身。

同一层中的项相对于彼此而言是不透明的,而相对于其他层中的项则是透明的。

该链接介绍了一个使用DeepItemCoordinateCache的原型项目,该项目将一个项及其子项目呈现到屏幕外的缓冲区中,然后呈现该缓冲区。这将达到预期的效果。

将子树折叠到屏幕外的单个缓冲区是可能的。这周我花了两天的时间研究它,编写了一些代码,最后得到了一个非常丑陋的原型,我还不想分享它。但我已经看到,这是完全有可能的,而不破坏QGV的内部。我配音了两种新的缓存模式: DeepItemCoordinateCache -缓存项和“所有”子级,如果父项被转换为DeepDeviceCoordinateCache -保存为DeviceCoordinateCache,则不会重新绘制“任意”子元素。

不幸的是,我不知道他的原型代码是否在任何地方可用。他暗示它在https://doc.qt.io/qt-5/qtwidgets-graphicsview-embeddeddialogs-example.html的嵌入式对话框示例中,所以也许您应该在那里搜索。

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

https://stackoverflow.com/questions/39284835

复制
相关文章

相似问题

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