如何在Qt中为无框窗口添加阴影

Thu*_*tha 12 qt window shadow borderless

我正在尝试创建一个在其下面有阴影的无框窗口.当我们用Qt :: FramelessWindowHint标志创建一个无边框窗口时,它不包含阴影.但是我们可以通过创建QGraphicsDropShadowEffect对象,然后通过setGraphicsEffect函数将其传递给窗口小部件,从而轻松地为子窗口小部件添加阴影.但这似乎对QMainWindow不起作用.请帮我把阴影放到Qt的无框窗口......

zeF*_*ree 13

你可以使用这个简单的hack来做到这一点:


将一个"QWidget"(比如小部件)添加到MainWindow,并将MainWindow上的所有内容移动到小部件.然后这样做:

setAttribute(Qt::WA_TranslucentBackground); //enable MainWindow to be transparent

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用.看到:

有阴影的主窗的错觉

  • 我只是尝试用 PySide 实现这个。看起来很整洁,但有一些大问题: 第一:阴影不是 ClickTrough!如果单击阴影,您仍然在单击窗口 :( 第二:阴影是窗口的一部分。最大化它会留下阴影间隙(如果真的最大化,您可能会抓住它并停用阴影边框)如果水平最大化或者垂直只是这有点奇怪......该死。必须有一种方法告诉Windows使用系统阴影......尽管EA Origin游戏工具似乎正在使用这种方法^。我只是想要一个更大的阴影;] (2认同)