我正在Qt 5.9中构建一个需要在X11显示器上运行的UI。我正在尝试向对话框窗口添加阴影 - 但它们不适用于X11。
我采取的方法来自zeFree在This Question中的答案。 (将窗口中的所有内容放在一个窗口小部件中,将窗口设置为半透明,并在窗口小部件上创建一个阴影效果)。
setAttribute(Qt::WA_TranslucentBackground); //enable Window to be transparent
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
它在我的redhat vm中运行得很好:
但是当我发送到X11显示器时,我看起来不支持透明度,而是让阴影变为黑色:
我的问题是:有没有办法让我的Dialogs投影到我的主窗口而不是自己的(透明)背景?我的应用程序将在X11显示器上全屏显示,因此我不需要担心窗外的阴影效果。
任何给我一个干净的方法来获得这个X11显示器上的阴影效果的答案都将被接受。
答案 0 :(得分:0)
如果你的窗口管理不支持透明度,那你就不幸了IMO。至少用你目前的方法。
理论上有一种方法可以伪造它,前提是你可以从你应用程序下面的底层窗口管理器组合中获取像素值,然后从你的应用程序中绘制这些像素,填充黑色空白,并在上面填充阴影,最后是你的GUI。
还有更可行的放弃本机窗口对话框的过程,并使用常规浮动窗口小部件伪造对话框。这样做的缺点是它只能在主窗口的范围内移动,但这样你就可以完全控制绘图而不会成为平台限制的牺牲品。