我正在尝试创建一个在其下面有阴影的无框窗口。当我们使用 Qt :: FramelessWindowHint 标志创建无边框窗口时,它不包含阴影。 但是我们可以通过创建 QGraphicsDropShadowEffect 对象轻松地为子窗口小部件添加阴影,然后通过 setGraphicsEffect 函数将其传递给窗口小部件。但这似乎对QMainWindow不起作用。请帮我把阴影放到Qt的无框窗口......
答案 0 :(得分:13)
你可以使用这个简单的黑客来做到这一点:
向MainWindow添加“QWidget”(比如小部件),并将MainWindow上的所有内容移动到小部件。然后这样做:
setAttribute(Qt::WA_TranslucentBackground); //enable MainWindow to be transparent
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
这似乎对我有用。参见:
答案 1 :(得分: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);
}
编辑:
不,我的窗户没有点击(我觉得我写的时候睡着了)。实际上,我的QDialog实例中的偶数Qt::WA_TransparentForMouseEvent
属性不起作用。在网上研究信息,我发现让这项工作比我想象的要困难得多。
答案 2 :(得分:0)
一个不那么令人遗憾的解决方案是使用QtCore.Qt.ToolTip
窗口标志而不是FramelessWindowHint
!