替代无框架窗阴影的QGraphicsDropShadowEffect

时间:2016-12-27 01:23:34

标签: c++ qt

与今天的许多软件应用程序一样,我希望我的程序有一个无框的窗口,它仍然有一个阴影,使其更适合操作系统。第一步是将窗口标志设置为Qt::FramelessWindowHint以删除框架。但更棘手的部分是在窗口外面添加一个投影。我选择将QGraphicsDropShadowEffect添加到较小的基本小部件中,该小部件包含所有内容,并通过将属性QMainWindow设置为true来使Qt::WA_TranslucentBackground透明。

这对我来说似乎是一个很好的解决方案,直到我添加了QSizeGrip才能启用窗口大小调整。每次调整窗口大小时,都会调用一个paint事件,并且需要重新计算QGraphicsDropShadowEffect。这导致SUPER波动的大小调整和性能大打击。

QGraphicsDropShadowEffect有哪些替代品有更好的效果?

1 个答案:

答案 0 :(得分:0)

我提出了我自己尚未见过的解决方案。

我最终制作了12个png图像,当按照一组布局排列时,会产生投影的错觉。我确定有很多方法可以做到这一点,但我所做的是将每一方分成3个部分。这解释了可以设置投影的许多不同方式(偏移和圆角)

这是一张夸张的图表:

shadow_example

红色区域是QLabel,像素图标与外角对齐。紫色区域是QLabel,具有重复的背景图像。红色区域大小是固定的,但紫色区域可以通过最小/最大尺寸和布局拉伸设置自由扩展。顶部和底部边缘是水平布局,左右边缘是垂直布局。

这对我的用例非常有效并解决了所有不稳定的问题:)