2016-12-27 1052 views
0

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

这似乎是一个很好的解决方案,直到我添加了一个QSizeGrip来启用调整窗口大小。每次调整窗口大小时,都会调用绘画事件,并且需要重新计算QGraphicsDropShadowEffect。这会导致SUPER震荡调整大小,并导致性能下降。

QGraphicsDropShadowEffect有更好的表现吗?

+0

显示您的代码,请 – eyllanesc

+0

好吧,我编辑我的问题,希望能够遵循的准则更好。 – mrg95

回答

0

我想出了我自己的解决方案,我还没有看到过。

我最终制作了12个PNG图像,当它们排列在一组布局中时,给出了投影阴影的错觉。我确信有很多方法可以做到这一点,但我所做的是将每一面分成三部分。这解释了许多不同的方式阴影可以设立(偏移和倒圆角)

下面是一个夸张图:

shadow_example

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

这都非常好,我的使用情况,并解决了所有问题波涛汹涌:)