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

如何让Qt透明胶片通过X11工作?(或使dropshadows适用于X11的另一种方法),qt,transparency,x11,dropshadow,Qt,Transparency,X11,Dropshadow,我正在Qt5.9中构建一个需要在X11显示器上运行的UI。我正在尝试将阴影添加到对话框窗口中,但它们在X11上不起作用 我采用的方法来自zeFree在中的回答。(将窗口中的所有内容放在一个小部件中,将窗口设置为半透明,并在小部件上创建dropshadow效果) 它在我的redhat虚拟机中非常有效: 但当我发送到X11显示器I时,似乎不支持透明度,而我得到的是黑色阴影: 我的问题是:有没有办法调整我的Qt,以便通过X11显示器运行此应用程序可以正确显示我的透明度 最终,任何能在X11显示器上

我正在Qt5.9中构建一个需要在X11显示器上运行的UI。我正在尝试将阴影添加到对话框窗口中,但它们在X11上不起作用

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

它在我的redhat虚拟机中非常有效:

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

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


最终,任何能在X11显示器上产生工作阴影的建议都会非常好

为了解决这个问题,我使用下面的函数在主窗口上创建了一个阴影对象。(它将窗口放在屏幕中间并生成阴影对象),然后在显示和隐藏窗口时,在阴影对象上执行do->()和-> HID()。这有点复杂,但这是我发现的唯一一个通过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;
}

为了解决这个问题,我使用下面的函数在主窗口上创建了一个阴影对象。(它将窗口放在屏幕中间并生成阴影对象),然后在显示和隐藏窗口时,在阴影对象上执行do->()和-> HID()。这有点复杂,但这是我发现的唯一一个通过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;
}

你有合成窗口管理器吗?这是这种部分透明的先决条件。不幸的是,我不知道。我的目标显示器是一个Esterline显示器,它有一个IP和一些未知的windows管理器。我在redhat 7.3上免费获得的所有奇特的Qt窗口样式在此显示器上都丢失了。如果您无法选择窗口管理器,那么很不幸,您可能会运气不佳。听起来,使用透明胶片时,获取此样式不是一个选项。也许有另一种方法可以创建阴影效果。将其放在我的主窗口上,而不是将其附加到对话框。隐马尔可夫模型。。也许在对话框下的主窗口上创建一个新的小部件——纯粹是为了产生阴影效果。你有合成窗口管理器吗?这是这种部分透明的先决条件。不幸的是,我不知道。我的目标显示器是一个Esterline显示器,它有一个IP和一些未知的windows管理器。我在redhat 7.3上免费获得的所有奇特的Qt窗口样式在此显示器上都丢失了。如果您无法选择窗口管理器,那么很不幸,您可能会运气不佳。听起来,使用透明胶片时,获取此样式不是一个选项。也许有另一种方法可以创建阴影效果。将其放在我的主窗口上,而不是将其附加到对话框。隐马尔可夫模型。。也许在对话框下的主窗口上创建一个新的小部件——纯粹是为了产生阴影效果。