QT 轻松实现半透明遮罩效果
一、背景
有时候我们需要实现下面的半透明遮罩效果,以便突出子窗口。
二、实现原理
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 轻松实现半透明遮罩效果相关推荐
- 为图片添加半透明遮罩效果
平时为图片添加半透明遮罩效果,我的做法如下: 利用标签i实现背景半透明遮罩.当鼠标hover时, 提高i的背景色透明度值background-color: rgba(0, 0, 0, .6) < ...
- jquery 半透明遮罩效果 小结
最近偏离学术的道路越来越远了!! 今天要小结的是实现一个半透明遮罩效果.点击页面上的一个按钮,立即在屏幕的正中央显示某个部件,并且在这个部件之外的区域像是蒙上了一层半透明的遮罩.点击遮罩区域,该正中央 ...
- C#实现winform仿div+css半透明遮罩效果
本文实现在winform项目实现网页div+css关透明效果,挺帅的,在网页中要实现div的半透明遮罩层效果不难,在winform项目就不是这么容易了,下面我们来看下效果图先: 正常时: 文章来自 ...
- 半透明遮罩效果 DIV
1.用JS判断你的显示器分辨率: var iWidth = window.screen.availWidth; var iHeight = window.screen.availHeight; ,获取 ...
- 用div层来实现页面半透明遮罩效果
实现效果: 弹出一个窗口的时候,窗口后面的页面变暗,并且不能操作 难点: 因为div 层是不能把select控件遮住的,所以要特殊处理,方法两种,一种是在弹出窗口下面加一层iframe来遮住selec ...
- QT控件系列一 | 半透明遮罩弹窗
QT控件系列一 | 半透明遮罩(弹窗) 文章目录 QT控件系列一 | 半透明遮罩(弹窗) 1.1 前言 1.2 原理(技术点) 1.3 使用 1.4 资源下载 1.1 前言 我们看Windows桌 ...
- qt 实现拖动矩形角度_PPT技巧应用—利用PPT的遮罩效果来实现文字的炫彩变化
在运用PPT的实际过程当中,很多小伙伴不知道怎么操作才能完成文字的特殊炫彩效果,下面我们就来给大家讲讲如何通过PPT的遮罩效果来实现文字的超级炫彩功能. 首先,我们新建一个空白PPT文档,在插入菜单下 ...
- 巧用遮罩效果,让你动画宣传视频更容易制作 | 万彩动画大师
在宣传动画视频中随心所欲自定义遮罩蒙版,可以遮挡部分图像内容,也可以显示特定区域的图像内容.遮罩效果的设置甚至为图片增添艺术装饰效果,给观众带来惊艳的视觉享受.那么,遮罩蒙版是什么?到底要怎么用?能够 ...
- C#实现Winform自定义半透明遮罩层
在网页中通过div+css实现半透明效果不难,今天我们看看一种在winfrom中实现的方法: 效果图如下,正常时: 显示遮罩层时: 自定义遮罩层控件的源码如下: View Code using Sys ...
最新文章
- 【Web】HTTPS 引入http资源,混合内容
- redis-Set集合操作SADD,SMEMBERS,scard,srem
- 整理Java基础知识--NumberMath类
- 汇总:MySQL 8.0 运维便捷命令
- 导出FLASH用反射的时候要注意的问题
- H5 video的使用
- linux shell脚本 main,Linux shell启动Java Main函数脚本
- linux创建用户、设置密码、修改用户、删除用户:
- windows系统搭建redis集群
- python怎么过滤标点符号大全_python 过滤标点符号
- Web安全—暴力破解(pikachu)
- 8.称呼/no/not/meet/nice/of/倒装句/介绍他人的方式/see
- 惠普z系列服务器,惠普Z8/Z6/Z4 G4新款工作站/服务器主机:Quadro P6000 48TB存储
- 深入浅出学算法007-统计求和
- ubuntu下git搭建服务器(gitosis)
- USB射频功率计DIY——构建软件校准方案
- 木棍上的蚂蚁jolj2466 模拟法
- 推荐一个开源的 .NET 二维码生成库
- 谷歌三大论文中文版之一:Bigtable:一个分布式的结构化数据存储系统
- U盘做启动盘后 容量变小怎么恢复?