教你如何用Qt做透明的窗体,setMask,Qt,Opacity

QWidget中setMask函数 1.场景说明 在项目中,我们有时候会遇到一些特殊的UI场景。比如如下图所示: 这种带阴影的模糊效果,其实这种效果的方法很多。但是我想的是,尽量不要让我自己手动写代码实现效果。用UI设计器能搞定就行了。尽量少手写代码 像这种的带浮层的阴影效果,最上面就是一层阴影的窗口。 这样就会有一个问题,就是上面的是阴影窗口。如果下面有按钮或者其他的窗口,你点击的时候就不会有事件过来。因为事件被上一层窗口截获了。 有的朋友就可能会想到用setAttribute(Qt::WA_Transparen... 阅读详情
// In this function, we can get the height and width of the current widget
void Widget::resizeEvent(QResizeEvent *)
{
    // Use a bitmap as a mask. A bitmap only has two kind of colors: white(value is 0)
    // or black(other values). When we use it to set mask, we can see the window at the position
    // where the color value is 0, and other place will be transparent.
    QBitmap bitMap(width(),height()); // A bit map has the same size with current widget
    QPainter painter(&bitMap);
    painter.setPen(QColor(255,255,255)); // Any color that is not QRgb(0,0,0) is right
    painter.drawRect(0,0,width(),height());

    // Now begin to draw the place where we want to show it
    painter.setPen(QColor(0,0,0));
    drawTextOnWin(&painter);
    drawImageOnWin(&painter);

    setMask(bitMap);
}
void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setPen(QColor(Qt::red));
    // As the place where we want to draw has been set opaque in the resizeEvent, so what we draw here
    // will be shown
    drawTextOnWin(&painter);
    drawImageOnWin(&painter);
}
void Widget::drawTextOnWin(QPainter *painter)
{
    painter->setFont(QFont(font().family(),15));
    painter->drawText( (width()-300)/2,0,300,50,Qt::AlignHCenter,"Now you can see me!");
}
void Widget::drawImageOnWin(QPainter *painter)
{
    QPixmap imageTest(":/imageItem/pngImage.png");
    painter->drawPixmap( (width()-imageTest.width())/2, (height()-imageTest.height())/2,
                          imageTest.width(), imageTest.height(), imageTest );
}

上面是源码。附件里是效果图。
Qt提供了setOpacity的函数,但是使用之后,窗体所有子控件都变成同样的透明色了。
这里我们利用setMask()函数,以QBitmap为参数,通过对QBitmap做精细的操作(关键在于QBitmap支持用painter直接在上面绘制),最终达到这样的效果:我们想要透明的地方变成透明,我们想要放置部件的地方变成非透明可见的。这样就达到了我们想要的效果。
具体实现的方法也很简单:如果你想在paintEvent里面绘制任何内容,也要同时在QBitmap上做绘制,前提是在QBitmap上绘制的时候画笔的rgb设置成QRgb(0,0,0)。
道理我已经讲明白了。大家可以自己把代码弄到自己的类里面实验一下。
例子中只是最简单的演示,按照这个思路我想可以做出更多更灵活的应用的,比如可以让窗体介于透明和非透明之间(这里需要准备一个对应的透明色的png图片,或者使用相应的Qt函数来做都行)。最关键的是这种方法下透明度的操作不会影响到子控件的。
这里的
图片:An_Example_How_To_Draw_A_Transparent_Widget.png 
转载:教你如何用Qt做透明的窗体,setMask,Qt,Opacity - 楚江北 - 矮子爬梯
Qt之遮罩—实现不规则窗体 使用遮罩可以将窗口形状多样化,变成各种各样的图片或者图形,相信看完这篇文章可以让你实现多样化窗口和部件时更加游刃有余! 阅读详情

相关推荐

Qt QStackedWidget平滑切换动画实现:淡入淡出与滑动效果详解

在桌面应用开发中,界面切换的流畅性是提升用户体验的关键因素。通过动画技术实现平滑过渡,能够有效降低用户在不同任务间切换时的认知负荷,增强应用的视觉连贯性和专业度。其核心原理是利用属性插值动画,在页面切换过程中动态改变控件的位置、透明度等视觉属性,从而创造出自然的过渡效果。在Qt框架中,QPropertyAnimation类为实现这类动画提供了强大支持,它可以对任何Q_PROPERTY进行插值计算。结合QStackedWidget进行页面管理,开发者能够为多页面应用添加丰富的切换效果,如淡入淡出、水平滑动等。

深未来技术 494

QT使用图片为窗口设置遮罩,创建不规则形状的窗口

准备一张透明背景色的图片,将图片添加到qt的资源文件中 2.使用QPixmap加载图片,设置窗口的大小为图片的大小,并为窗口设置遮罩 QPixmap pix; //加载图片 pix.load(":/image/yafeilinux.png"); //设置窗口大小为图片大小 resize(pix.size()); //为窗口设置遮罩 setMask(pix.mask()); 重写绘图事件将图片绘制在窗口上 void Widget::pai.

kllo__的博客 1147

使用QT 开发不规则窗体

QT中使用不规则窗体,有面。

x879014419的博客 1412

Qt setMask 窗口

根据文档: 1:void QWidget::setMask(const QBitmap & bitmap); 2:void QWidget::setMask(const QRegion & region); 所以可以用透明图片和自定义区域设置 如: 1:透明图片设置,如果需要显示图片,还需将图绘制添加 paint; void paintEvent(QPaintEvent *

chinabinlang的专栏 1万+

Qt 之 QLabel 设置面罩

效果图QLabel 是Qt 中的标签类,一般情况我们只是设置文字描述,但是QLabel不仅仅只是显示一些文字介绍那么简单。QLabel支持Html中标签的使用,同时可以设置普通图片和动态图。这里简单介绍一下如何为QLable设置面罩。代码很简单,通过设置不同形状的面罩可以达到不同的效果。1、设置动态图片QPixmap pixmapMask(":/Resources/maskRound.png");

前行之路还需前行 6171

Qt使用Mask实现异形按钮.rar

5.保证无毒 1.简单,方便,实用 3.实例可以自行改用 1.如有非法,本人无法律责任! 8.更多作品,查找标签“朱建强”7.下载,请杀毒! 4.如需联系我请看左边数字!1.如不知代表何物,那就放弃计算机吧! 0.还不懂?优快云老板不让我上传联系方式。

qt中setMask()的图片设置

首先设置一张主图,就是你要显示的图片,然后准备一张遮掩图,用QBitmap类型,遮掩图中1.黑色区域表示显示的部分,2.白色区域表示不显示部分

qq_35674193的博客 7760

用SPSS做信效度分析

对问卷进行Cronbach’s Alpha信度检验。如果此值高于0.8,则说明信度高;如果此值介于0.7-0.8之间,则说明信度较好;如果此值介于0.6~0.7,则说明信度可接受;如果此值小于0.6,说明信度不佳。下面利用SPSS进行分析,点击分析–标度–可靠性分析选项,选中所要分析的问卷数据或题目。得到结果,我们要看这个有用的结果,当克隆巴赫Alpha系数(也可以看标准化后的)大于0.8时候,说明问卷信度较高。

小高~的博客 1万+

透明窗体子窗体显示

// In this function, we can get the height and width of the current widgetvoid Widget::resizeEvent(QResizeEvent *){// Use a bitmap as a mask

LQ0622的资料库 1021

棋牌App逆向工程实战:透视风险分析与反作弊加固思路

在移动应用安全领域,逆向工程是一项关键的攻防技术,它通过静态分析、动态调试与协议抓包等手段,深入还原客户端真实逻辑。这项技术的核心原理,是从已编译的安装包中提取数据流,验证服务端下发的信息是否超出了客户端应有的可见范围。从技术价值看,安全测试人员可以借此定位协议层、内存层与缓存层的潜在风险,为反作弊体系提供精准的加固建议。在棋牌类App等实时对局场景中,逆向工程常被用于排查牌局信息泄露类隐患,而合规授权与测试环境是开展此类研究的必要前提。本文结合一次棋牌App的安全评估实践,梳理了从环境准备到数据流还原的完

weixin_29326909的博客 175

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤)

本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。

weixin_29229055的博客 919

Qt基础技术(经验积累)

Qt基础技术,学习笔记。列举了常用到的技术点,以及解决方案。去掉字符串前后的空格函数,模式对话框,QList 输出结果,Qt信号与槽,QTimer类,去掉标题栏和设置窗口透明用法等等。

凌云(lankin)的专栏 5724

从勒索软件攻击到数据重生:SQL Server MDF文件修复的实战生存指南

本文详细介绍了SQL Server MDF文件在遭遇勒索软件攻击后的修复策略,重点解析了Recovery Toolbox工具链的应用流程。从灾难评估到数据验证,提供分阶段修复操作、高级修复技术及防御加固方案,帮助企业快速恢复数据库并提升安全防护能力。

weixin_28327051的博客 715

qt 多边形填充 生成语义分割的mask 灰度图

直接在QWidget界面显示,重写paintEvent即可 如上图所示: 没有path.moveTo(10, 10); 会从左上点开始画 没有path.closeSubpath(); 最后封闭多边形的那条线就没有了。场景: 输入:多边形的点集(有多个多边形) 输出:一个矩阵,存成灰度图 要求: 多边形1,圈出来的地方都填充数字1;多边形2圈出来的地方填充数字2.。。。。。背景全是0分析:步骤: 在彩图上绘制并填充多边形 这里我假设 ,从彩图转灰度图是只用到 rgb中的g,所以颜色只有g有值 然后把彩图转

fuyouzhiyi的博客 1083

无人机避障——卡内基梅隆大学(CMU)CERLAB 无人机自主框架复现

CMUCERLAB无人机自主框架是一个模块化的无人机自主导航系统,包含感知、测绘、规划和控制等组件。安装过程中遇到的主要问题包括:(1)cv_bridge路径未正确识别,需手动指定路径;(2)OpenCV版本冲突(4.2与4.6),导致动态导航节点崩溃。解决方案包括:完全卸载OpenCV4.2,重新编译安装OpenCV4.6,并修改相关CMakeLists文件指定版本。最终成功运行仿真环境,实现无人机在Gazebo和RViz中的自主避障导航功能。

weixin_45390670的博客 1646

2024银行科技岗笔试通关秘籍:从资料准备到实战技巧

本文系统解析了2024年银行科技岗笔试的考察内容与备考策略。文章指出,笔试是一场涵盖通用能力测试、计算机专业基础、金融科技知识和英语性格测试的复合型考试,并重点提供了数据结构与算法、计算机网络、数据库等高频考点的深度解析与实战突破技巧,帮助考生高效准备,顺利通关。

weixin_29243279的博客 121

不规则窗体setMask()

Qt建立的窗体大多数是方形的,有时需要圆形、椭圆形等不规则的对话框。 setMask()函数为窗体设置遮罩,实现不规则窗体。设置遮罩后的窗体尺寸依然是原窗体的大小,只是被遮罩的地方不可见。 实例+代码及详细注释.

菜鸟打怪的博客 2336

STM32 HAL SDADC DMA

由于项目需要使用STM32F373单片机的SDADC功能对电位计进行检测,网上资料比较少,踩了很多坑,下面进行总结。

weixin_44597885的博客 1196

Qt图形特效:QGraphicsOpacityEffect

一、描述 不透明度效果使源具有不透明度。该效果对于使源半透明非常有用,类似于淡入/淡出序列。可以使用setOpacity()函数修改不透明度。 二、属性成员 1、opacity : qreal。此属性保存不透明度。该值应在0.0到1.0的范围内,其中0.0是完全透明的,而1.0是完全不透明的。默认情况下,不透明度为0.7。 2、opacityMask : QBrush。此属性保留不透明蒙版。不透明度蒙版允许您将不透明度应用于元素的各个部分。默认情况下没有不透明蒙版。 三、成员函数 1、void

友善啊,朋友的博客 4108

【RT-DETR涨点改进】全网独家-特征融合改进篇 | AAAI 2025 顶会| 高效涨点,RT-DETR利用CDFA对比度特征聚合模块,适用于目标检查(全网独家创新)

本文提出了一种基于CDFA模块的多级特征融合优化RT-DETR模型,用于解决医学图像分割中的软边界模糊、小目标和共现现象等问题。CDFA模块通过对比度特征聚合、局部特征增强和多级注意力机制,有效提升模型性能。研究提供了三种改进方案(rtdetr-r18/y50/l-CDFA),并在多个医学数据集上验证了其有效性。核心创新包括语义信息解耦、对比驱动特征融合和尺寸感知解码器。实验结果表明,该方法在分割精度和鲁棒性方面达到SOTA水平。

Ai缝合怪、助力小伙伴高效发论文 509

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Qt窗体和控件遮罩效果

实现方式一:借助setMask(rect)函数。该函数将设置rect为可见区域,rect可以是控件的规则区域,也可以是bitmap范围。不规则的窗体、窗体上下重叠时需要鼠标穿透、只显示部分区域时。

阿呆 1185

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Qt实现半透明背景(遮罩)

实现功能 有时候我们的程序可能会需要弹出一个对话框,为了美观这个对话框后面需要半透明的遮罩。本文使用QWidget实现了一个半透明的遮罩,可以设置遮罩的大小,颜色,透明度以及遮罩内要显示的对话框,遮罩能够随着中央对话框的显示而显示,对话框的隐藏而隐藏,效果如下: 遮罩MaskForm的实现 想法是将要显示的对话框安装事件过滤器MaskForm,MaskForm拦截对话框的QEvent::Show...

急支糖浆的博客 4922

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 强大的Qtstylesheet
下一篇: qt开发中遇到的问题整理五
Qicz
博客等级 码龄16年 56粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值