一、背景
有时候我们需要实现下面的半透明遮罩效果,以便突出子窗口。
二、实现原理
1.总共分为三层:主窗口(Form)、遮罩、显示窗口。
2.主窗口的子窗口是遮罩,遮罩的子窗口是显示窗口。
3.遮罩设置为无边框,以及颜色和透明度等。
4.然后监控显示窗口事件,显示窗口显示,遮罩也跟着显示。关闭同理。
三、代码动态图下面

//遮罩头文件
class MaskForm : public QWidget
{Q_OBJECTpublic:MaskForm(QWidget *parent = 0);~MaskForm();//注册要显示在遮罩中的窗口void installWidget(QWidget *widget);//设置遮罩颜色、透明度void setMaskColor(const QColor &color,float opacity);//设置顶层窗口void setTopWidget(QWidget *widget);private:void init();void showEvent(QShowEvent *event);bool eventFilter(QObject *watched, QEvent *event);private:QWidget *m_topWidget;    //顶层窗口,设置遮罩颜色、透明度QWidget *m_widget;       //遮罩中显示的窗口
};
//遮罩CPP文件
MaskForm::MaskForm(QWidget *parent): QWidget(parent),m_topWidget(nullptr),m_widget(nullptr)
{init();
}MaskForm::~MaskForm()
{}void MaskForm::installWidget(QWidget *widget)
{if(widget == nullptr){return;}//监控显示窗口事件widget->installEventFilter(this);m_widget = widget;connect(m_widget, &QWidget::destroyed, this, [=](){m_widget = nullptr;});
}void MaskForm::setMaskColor(const QColor &color, float opacity)
{if(!color.isValid()){return;}QPalette palette = this->palette();//通常指窗口部件的背景色palette.setColor(QPalette::Window,color);this->setPalette(palette);setWindowOpacity(opacity);
}void MaskForm::setTopWidget(QWidget *widget)
{//设置遮罩父窗口if(widget == nullptr){return;}m_topWidget = widget;
}void MaskForm::init()
{/*Qt::FramelessWindowHint1.产生一个无边框的窗口,无法移动和改变大小。Qt::Tool1.工具窗口,如果有父窗口,则工具窗口将始终保留在它的顶部。2.默认情况下,当应用程序处于非活动状态时,工具窗口则消失。*/setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);setMaskColor(QColor(0,0,0),0.6f);//1.返回具有键盘输入焦点的顶级窗口,如果没有应用程序窗口具有焦点,则返回0.//2.但是即使没有焦点,也可能有一个活动窗口。例如一个窗口没有小部件接收关键事件。m_topWidget = QApplication::activeWindow();
}void MaskForm::showEvent(QShowEvent *event)
{Q_UNUSED(event);//确定显示的位置this->setGeometry(m_topWidget->geometry());
}bool MaskForm::eventFilter(QObject *watched, QEvent *event)
{if(watched == m_widget){if(event->type() == QEvent::Show){//显示窗口显示,则遮罩显示,this就是遮罩本身this->show();}if(event->type() == QEvent::Hide){this->hide();}}return QObject::eventFilter(watched, event);
}
//调用
void LoginDialog::on_pushButton_clicked()
{MaskForm *maskForm = new MaskForm(this);//设置遮罩的父窗口maskForm->setTopWidget(this);//构造显示窗口ToolTipsToolTips *toolTips = new ToolTips();//注册显示窗口,进行事件拦截(显示窗口开关,遮罩也跟着开关)。maskForm->installWidget(toolTips);toolTips->show();}

QT 轻松实现半透明遮罩效果相关推荐

  1. 为图片添加半透明遮罩效果

    平时为图片添加半透明遮罩效果,我的做法如下: 利用标签i实现背景半透明遮罩.当鼠标hover时, 提高i的背景色透明度值background-color: rgba(0, 0, 0, .6) < ...

  2. jquery 半透明遮罩效果 小结

    最近偏离学术的道路越来越远了!! 今天要小结的是实现一个半透明遮罩效果.点击页面上的一个按钮,立即在屏幕的正中央显示某个部件,并且在这个部件之外的区域像是蒙上了一层半透明的遮罩.点击遮罩区域,该正中央 ...

  3. C#实现winform仿div+css半透明遮罩效果

    本文实现在winform项目实现网页div+css关透明效果,挺帅的,在网页中要实现div的半透明遮罩层效果不难,在winform项目就不是这么容易了,下面我们来看下效果图先:   正常时: 文章来自 ...

  4. 半透明遮罩效果 DIV

    1.用JS判断你的显示器分辨率: var iWidth = window.screen.availWidth; var iHeight = window.screen.availHeight; ,获取 ...

  5. 用div层来实现页面半透明遮罩效果

    实现效果: 弹出一个窗口的时候,窗口后面的页面变暗,并且不能操作 难点: 因为div 层是不能把select控件遮住的,所以要特殊处理,方法两种,一种是在弹出窗口下面加一层iframe来遮住selec ...

  6. QT控件系列一 | 半透明遮罩弹窗

    QT控件系列一 | 半透明遮罩(弹窗) 文章目录 QT控件系列一 | 半透明遮罩(弹窗) 1.1 前言 1.2 原理(技术点) 1.3 使用 1.4 资源下载 1.1 前言 ​ 我们看Windows桌 ...

  7. qt 实现拖动矩形角度_PPT技巧应用—利用PPT的遮罩效果来实现文字的炫彩变化

    在运用PPT的实际过程当中,很多小伙伴不知道怎么操作才能完成文字的特殊炫彩效果,下面我们就来给大家讲讲如何通过PPT的遮罩效果来实现文字的超级炫彩功能. 首先,我们新建一个空白PPT文档,在插入菜单下 ...

  8. 巧用遮罩效果,让你动画宣传视频更容易制作 | 万彩动画大师

    在宣传动画视频中随心所欲自定义遮罩蒙版,可以遮挡部分图像内容,也可以显示特定区域的图像内容.遮罩效果的设置甚至为图片增添艺术装饰效果,给观众带来惊艳的视觉享受.那么,遮罩蒙版是什么?到底要怎么用?能够 ...

  9. C#实现Winform自定义半透明遮罩层

    在网页中通过div+css实现半透明效果不难,今天我们看看一种在winfrom中实现的方法: 效果图如下,正常时: 显示遮罩层时: 自定义遮罩层控件的源码如下: View Code using Sys ...

最新文章

  1. 【Web】HTTPS 引入http资源,混合内容
  2. redis-Set集合操作SADD,SMEMBERS,scard,srem
  3. 整理Java基础知识--NumberMath类
  4. 汇总:MySQL 8.0 运维便捷命令
  5. 导出FLASH用反射的时候要注意的问题
  6. H5 video的使用
  7. linux shell脚本 main,Linux shell启动Java Main函数脚本
  8. linux创建用户、设置密码、修改用户、删除用户:
  9. windows系统搭建redis集群
  10. python怎么过滤标点符号大全_python 过滤标点符号
  11. Web安全—暴力破解(pikachu)
  12. 8.称呼/no/not/meet/nice/of/倒装句/介绍他人的方式/see
  13. 惠普z系列服务器,惠普Z8/Z6/Z4 G4新款工作站/服务器主机:Quadro P6000 48TB存储
  14. 深入浅出学算法007-统计求和
  15. ubuntu下git搭建服务器(gitosis)
  16. USB射频功率计DIY——构建软件校准方案
  17. 木棍上的蚂蚁jolj2466 模拟法
  18. 推荐一个开源的 .NET 二维码生成库
  19. 谷歌三大论文中文版之一:Bigtable:一个分布式的结构化数据存储系统
  20. U盘做启动盘后 容量变小怎么恢复?

热门文章

  1. 今天 想了个问题,阿里旺旺及时消息
  2. maven跳过Test进行打包
  3. grails mysql_grails连接mysql
  4. 利用python绘制螺旋式正方形
  5. TL431稳压基准源简介及其应用
  6. mysql 递减查询_Sql实现递减查询
  7. 安卓基础控件(EditText、Button)以及布局(约束布局)的介绍
  8. CVPR2022《Stand-Alone Inter-Frame Attention in Video Models》
  9. 神州数码交换机RIP基础配置
  10. 企业生产线改善毕业论文【Flexsim仿真实例】