13

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

4

3 回答 3

14

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


将“QWidget”(例如小部件)添加到 MainWindow 并将 MainWindow 上的所有内容移动到小部件。然后这样做:

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

QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);

这似乎对我有用。看:

主窗口有阴影的错觉

于 2013-04-02T06:13:59.533 回答
2

我完全按照 zeFree 给出的说明(使用 Qt/C++),我的影子确实是点击通过(使用 Elementary OS Freya - 我不知道它与 Ubuntu、OX 或 Windows 之间是否存在不同的行为) ...我无法想象为什么你的不是。

唯一的区别是我将父窗口边距和模糊半径都设置得更大,并移除了阴影偏移。

这是我的片段:

void addDialogShadow(QWidget *target) {
    target->window()->setAttribute(Qt::WA_TranslucentBackground);
    target->window()->layout()->setMargin(50);
    QGraphicsDropShadowEffect* ef = new QGraphicsDropShadowEffect;
    ef->setBlurRadius(50);
    ef->setOffset(0);
    target->setGraphicsEffect(ef);
}

编辑:不,我的窗口没有点击(我想我写的时候睡着了)。事实上,即使Qt::WA_TransparentForMouseEvent我的 QDialog 实例中的属性也不起作用。在网上搜索信息,我发现制作这项工作比我想象的要困难得多。

于 2015-08-05T10:27:07.447 回答
0

一个不太好的解决方案是使用QtCore.Qt.ToolTip窗口标志而不是FramelessWindowHint

至少有一点阴影

于 2015-05-05T18:57:12.957 回答