Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT:阴影窗效果(灯光熄灭)_C++_Qt - Fatal编程技术网

C++ QT:阴影窗效果(灯光熄灭)

C++ QT:阴影窗效果(灯光熄灭),c++,qt,C++,Qt,我正在从主窗口打开一个模式窗口,我的兴趣是使背景变暗,以便顶部窗口完全可见,但主窗口看起来像“阴影”中的黑色。这取决于窗口管理器添加这种效果 例如,KWin和Mutter都有处理对话框的方法。KWin确实给主窗口加了阴影,我认为Mutter也加了一些额外的效果 在Mac操作系统中,模态窗口已经有了特殊的属性,可以把焦点放在它的专利窗口之间的关系上 windows处理这一问题的方式是将焦点强制放在模态上。但这实际上是窗口管理器的工作,用户可以根据自己的喜好选择要激活的效果。您可以在主窗口上显示一些

我正在从主窗口打开一个模式窗口,我的兴趣是使背景变暗,以便顶部窗口完全可见,但主窗口看起来像“阴影”中的黑色。这取决于窗口管理器添加这种效果

例如,KWin和Mutter都有处理对话框的方法。KWin确实给主窗口加了阴影,我认为Mutter也加了一些额外的效果

在Mac操作系统中,模态窗口已经有了特殊的属性,可以把焦点放在它的专利窗口之间的关系上


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(新覆盖(此));-叠加在我的代码中是唯一的,这就是我使用重置功能的原因。