如何把一个影子在Qt的一个无框窗(How to put a shadow to a Frameles

2019-06-28 02:29发布

我试图创建一个具有它。当我们下创建了Qt :: FramelessWindowHint标志它不包含阴影国界的窗口影子的无框窗。 但是,我们可以把阴影的子控件通过创建QGraphicsDropShadowEffect对象容易,然后通过setGraphicsEffect功能,将它传递给小部件。 但是,这似乎并没有为QMainWindow的工作。 请帮我把影子在Qt的一个无框窗...

Answer 1:

你可以使用这个简单的黑客做到这一点:


添加“QWidget的”(比如小部件)的主窗口和移动的一切,是在主窗口的小部件。 接着这样做:

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

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

这似乎为我工作。 看到:



Answer 2:

我严格遵守,确实是点击通过zeFree(使用Qt / C ++)和我的影子被赋予了指令(用初等OS芙蕾雅 - 我不知道是否有它和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的实例属性不起作用。 磨削网络上的信息,我发现使这项工作更加困难比我想象的。



Answer 3:

一个不那么aweseome的解决办法是使用QtCore.Qt.ToolTip窗口标志代替的FramelessWindowHint



文章来源: How to put a shadow to a Frameless window in Qt