C++ QT:阴影窗效果(灯光熄灭)
我正在从主窗口打开一个模式窗口,我的兴趣是使背景变暗,以便顶部窗口完全可见,但主窗口看起来像“阴影”中的黑色。这取决于窗口管理器添加这种效果 例如,KWin和Mutter都有处理对话框的方法。KWin确实给主窗口加了阴影,我认为Mutter也加了一些额外的效果 在Mac操作系统中,模态窗口已经有了特殊的属性,可以把焦点放在它的专利窗口之间的关系上C++ QT:阴影窗效果(灯光熄灭),c++,qt,C++,Qt,我正在从主窗口打开一个模式窗口,我的兴趣是使背景变暗,以便顶部窗口完全可见,但主窗口看起来像“阴影”中的黑色。这取决于窗口管理器添加这种效果 例如,KWin和Mutter都有处理对话框的方法。KWin确实给主窗口加了阴影,我认为Mutter也加了一些额外的效果 在Mac操作系统中,模态窗口已经有了特殊的属性,可以把焦点放在它的专利窗口之间的关系上 windows处理这一问题的方式是将焦点强制放在模态上。但这实际上是窗口管理器的工作,用户可以根据自己的喜好选择要激活的效果。您可以在主窗口上显示一些
windows处理这一问题的方式是将焦点强制放在模态上。但这实际上是窗口管理器的工作,用户可以根据自己的喜好选择要激活的效果。您可以在主窗口上显示一些半透明的小部件,它将创建阴影效果 例如,这样的小部件
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(newoverlay(this));那个在干什么?重置方法在哪里?我在没有重置调用的情况下尝试了它,它打开了一个覆盖,但它看起来是灰色的,没有alpha通道,因此origina背景窗口不可见。好的,它现在正在进行一些小的更改。谢谢@史蒂芬·安德森,很好,它适合你。别忘了选择答案:)覆盖uu.reset(新覆盖(此));-叠加在我的代码中是唯一的,这就是我使用重置功能的原因。