我试图创建一个具有它。当我们下创建了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