2017-10-10 84 views
0

我在Qt 5.9中構建一個需要在X11顯示器上運行的UI。我正在嘗試將陰影添加到我的對話窗口 - 但它們不能在X11上工作。如何通過X11獲取Qt透明膠片? (或另一種方式使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 Dropshadow

但是,當我發送到X11顯示我,它看起來像透明性不支持,而且我上陰影黑色,而不是:

X11 Dropshadow

我的問題是:是否有辦法來調整我的Qt使運行該應用程序通過X11顯示屏顯示將正確顯示我的透明膠片?

最終,任何導致X11顯示屏上工作投影的建議都會很棒!

+0

你有合成窗口管理器嗎?這是這種部分透明度的先決條件。 –

+0

不幸的是我不知道。我的目標顯示器是具有IP和一些未知窗口管理器的Esterline顯示器。我在redhat 7.3上免費獲得的所有奇特Qt窗口樣式在此顯示中都沒有。 – spickesj

+0

如果你不能選擇窗口管理器,那麼很可惜你很可能會失去運氣。 –

回答

0

要解決此問題,我最終使用下面的函數在主窗口上製作陰影對象。 (它將窗口放在屏幕中間並構建陰影對象)然後,當我顯示並隱藏窗口時,我在陰影對象上執行 - > 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; 
}