2015-07-21 50 views

回答

2

您可以在主窗口中顯示一些半透明的小部件,它會創建陰影效果。

例如,這樣的小部件。

class Overlay : public QWidget 
{ 
public: 
    Overlay(QWidget *parent) { 
    setPalette(Qt::transparent); 
    setAttribute(Qt::WA_TransparentForMouseEvents); 
    } 

protected: 
    void paintEvent(QPaintEvent *event) { 
    QPainter painter(this); 
    painter.setRenderHint(QPainter::Antialiasing); 
    painter.setBrush(QBrush(QColor(0,0,0, 150))); 
    painter.setPen(Qt::NoPen); 
    painter.drawRect(rect()); 
    } 
};  

然後創建這個小部件,調整大小和顯示:

overlay_.reset(new Overlay(this)); 
overlay_->resize(size()); 
overlay_->setVisible(true); 

您可以通過改變的paintEvent刷陰影色和transperancy玩。 希望這是你想要的效果。

+0

謝謝,看起來很有希望!將嘗試它。有一行我不明白:overlay_.reset(new Overlay(this));那是幹什麼的?重置方法在哪裏? –

+0

我試過它沒有重置調用,它打開一個覆蓋,但它看起來灰色沒有alpha通道,所以原始背景窗口不可見。 –

+0

好的,現在正在進行一些小的改動。謝謝! –

0

這是由窗口管理器添加這種效果。

例如,KWin和Mutter都有辦法處理對話。 KWin確實遮蔽了主窗口,我認爲Mutter也會帶來一些額外的效果。

在Mac OS中,模態窗口已經具有特殊的屬性,將其專注於它的專利窗口的關係。

窗戶處理這種方式是通過強調我認爲模態的重點。但它確實是窗口經理的工作,並且根據用戶的喜好來選擇應該激活的效果。