我正在尝试创建一个没有边框,但下面带有阴影的窗口。当我们使用Qt :: FramelessWindowHint标志创建无边框窗口时,它不包含阴影。 但是,我们可以通过创建QGraphicsDropShadowEffect对象,并通过setGraphicsEffect函数将其传递给小部件来轻松地为子部件添加阴影。 但对于QMainWindow似乎不起作用。请帮助我在Qt中为无边框窗口添加阴影。
我正在尝试创建一个没有边框,但下面带有阴影的窗口。当我们使用Qt :: FramelessWindowHint标志创建无边框窗口时,它不包含阴影。 但是,我们可以通过创建QGraphicsDropShadowEffect对象,并通过setGraphicsEffect函数将其传递给小部件来轻松地为子部件添加阴影。 但对于QMainWindow似乎不起作用。请帮助我在Qt中为无边框窗口添加阴影。
你可以使用这个简单的技巧来实现:
向MainWindow中添加一个"QWidget"(比如说widget),并将所有在MainWindow上的内容移动到widget中。然后执行以下操作:
setAttribute(Qt::WA_TranslucentBackground); //enable MainWindow to be transparent
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
这对我来说似乎有效。请参见:
我按照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);
}
编辑:
不,我的窗口不是可点击的(我想我写下这句话时正在睡觉)。事实上,即使在我的QDialog实例中添加Qt :: WA_TransparentForMouseEvent
属性也无效。在网上搜集信息后,我发现要使其起作用比我想象的要困难得多。
一个不太好的解决方案是使用 QtCore.Qt.ToolTip
窗口标志,而不是 FramelessWindowHint
!