【问题标题】:QT: shaded window effect (lights out)QT:阴影窗效果(熄灯)
【发布时间】:2015-07-21 01:53:46
【问题描述】:

我正在从我的主窗口打开一个模态窗口,我的兴趣是使背景变暗,以便顶部窗口完全可见,但主窗口看起来像“阴影”一样黑暗。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您可以在主窗口上显示一些半透明的小部件,它会产生阴影效果。

    例如,这样的小部件。

    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 中更改画笔来调整阴影颜色和透明度。 希望这是你想要的效果。

    【讨论】:

    • 谢谢,看起来很有希望!会试试的。有一行我不明白:overlay_.reset(new Overlay(this));那个人在做什么?重置方法在哪里?
    • 我在没有重置调用的情况下尝试过它,它会打开一个叠加层,但它看起来是灰色的,没有 alpha 通道,因此原始背景窗口不可见。
    • 好的,它现在可以进行一些小的更改。谢谢!
    • @StephenH.Anderson,很高兴它对你有用。不要忘记选择答案:) overlay_.reset(new Overlay(this)); - 在我的代码中,overlay_ 是 unique_ptr,这就是我使用重置功能的原因。
    【解决方案2】:

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

    例如,KWin 和 Mutter 都有自己处理对话框的方法。 KWin 确实遮蔽了主窗口,我认为 Mutter 也这样做了,并带有一些额外的效果。

    在 Mac OS 中,模态窗口已经具有特殊的属性,可以将其重点放在其专利窗口的关系上。

    windows 处理这个问题的方式是强制关注我认为的模式。但这确实是窗口管理器的工作,取决于用户的喜好来选择应该激活的效果。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 2012-11-02
      • 2014-04-07
      • 1970-01-01
      • 2014-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      相关资源
      最近更新 更多