2015-07-21 124 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中,模态窗口已经具有特殊的属性,将其专注于它的专利窗口的关系。

窗户处理这种方式是通过强调我认为模态的重点。但它确实是窗口经理的工作,并且根据用户的喜好来选择应该激活的效果。