先设置一个QWidget作为遮罩并设置如下属性
this->setPalette(Qt::black);
this->setWindowOpacity(0.2);//设置窗口透明度
this->setWindowFlags(Qt::FramelessWindowHint | windowFlags());//去掉标题栏
在要设置遮罩的窗口创建如下对象
shadewidget = new Shadewidget;
shadewidget->setParent(this,Qt::FramelessWindowHint | Qt::Window);
shadewidget->setGeometry(0, 0, 1, 1);
shadewidget->hide();
这样设置可以使遮罩层不会出现在任务栏作为单独一个窗口:
shadewidget->setParent(this,Qt::FramelessWindowHint | Qt::Window);
创建遮罩后隐藏之,然后在需要使用遮罩的地方使遮罩显示出来就行了。
效果: