如何让 Qt 透明胶片通过 X11 工作? (或另一种使阴影适用于 X11 的方法)

How to get Qt Transparencies working through X11? (Or another way to make dropshadows work for X11)

我正在 Qt 5.9 中构建一个 UI,需要在 X11 显示器上 运行。我正在尝试向我的对话框添加阴影 windows - 但它们在 X11 上不起作用。

我采用的方法来自 zeFree 在 This Question 中的回答。 (将 window 中的所有内容都放在一个小部件中,将 window 设置为半透明,并在小部件上创建阴影效果)。

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

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

它在我的 redhat 虚拟机中运行良好:

但是当我发送到 X11 显示 I 时,似乎不支持透明度,我得到的是黑色阴影:

我的问题是:有没有一种方法可以调整我的 Qt,以便 运行通过 X11 显示器运行此应用程序可以正确显示我的透明胶片?

最终,任何能在 X11 显示器上实现有效投影的建议都会很棒!

为了解决这个问题,我最终使用下面的函数在主 window 上创建了一个阴影对象。 (它将 window 放在屏幕中间并构建阴影对象)然后当我显示和隐藏 window 时,我在阴影对象上执行 ->show() 和 ->hide() .这有点麻烦 - 但这是我发现在这个特定触摸屏上通过 X11 工作的唯一解决方案。

QPushButton * MainWindow::positionAndShadow(QDialog* window)
{
    int xpos = SCREEN_RES_H/2 - window->size().width()/2;
    int ypos = SCREEN_RES_V/2 - window->size().height()/2;
    if (ypos - 10 > 0)
    {
        ypos -= 10;
    }
    window->setGeometry(xpos,ypos,window->size().width(),window->size().height());

    QPushButton* shadow = new QPushButton(this);
    shadow->setEnabled(false);
    shadow->setGeometry(xpos,ypos,window->size().width(),window->size().height());

    QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
    effect->setColor(QColor(40, 40, 40, 220));
    effect->setBlurRadius(15);
    shadow->setGraphicsEffect(effect);
    shadow->hide();

    return shadow;
}