QT:阴影窗口效果(熄灯)

时间:2015-07-21 01:53:47

标签: c++ qt

我从主窗口打开一个模态窗口,我感兴趣的是让背景变暗,这样顶部的窗口就完全可见,但是主窗口看起来很暗,就像在"阴影中一样。

2 个答案:

答案 0 :(得分: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中的画笔来使用阴影颜色和透明度。 希望这是你所希望的效果。

答案 1 :(得分:0)

这取决于窗口管理器添加这样的效果。

例如,KWin和Mutter都有办法处理对话框。 KWin确实遮住了主窗口,我认为Mutter也做了一些额外的效果。

在Mac OS中,模态窗口已经具有特殊属性,使其专注于其专利窗口的关系。

Windows处理这个问题的方法是强调关注我认为的模态。但它确实是窗口管理员的工作,取决于用户选择应该激活什么效果的偏好。