当前位置: 首页 > news >正文

Qt设置部件的阴影效果

QT中的比如QWidget,QLabel,QPushbutton,QCheckBox都可以设置阴影效果,就像这样:
在这里插入图片描述
以QWidget为例,开始尝试使用样式表的形式添加阴影,但没有效果,写法如下:

QWidget#widget1::shadow{color: rgba(220, 220, 220,1);radius:10px;offset: 5px;
}

后来查阅资料,说是要先设置背景阴影才能生效,于是样式表改为:

QWidget#widget1{
//背景色background-color: rgba(255, 255, 255,1);//边线border: 1px solid rgba(220, 220, 220,1);//边线倒圆角border-radius:10px;
}
QWidget#widget1::shadow{color: rgba(220, 220, 220,1);radius:10px;offset: 5px;
}

依然无法生效,判断是样式表的形式是不行的,改为使用代码形式设置。
代码设置阴影,一般选用“QGraphicsDropShadowEffect”类来实现。
先添加该类头文件;
再创建一个阴影样式,并设置部件的阴影;

    //设置阴影特效//创建特效对象QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this);//设置偏移量,x轴,y轴shadow_effect->setOffset(2, 2);//设置阴影颜色和透明度shadow_effect->setColor(QColor(125, 125, 125, 200));//设置阴影外射的尺寸shadow_effect->setBlurRadius(8);//给部件设置阴影ui->widget1->setGraphicsEffect(shadow_effect);

这样就可以让QWidget有一个阴影效果;

同样的,对QPushbutton按钮设置一个阴影效果:

QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);shadowEffect->setBlurRadius(15.0);shadowEffect->setColor(Qt::black);shadowEffect->setOffset(5.0, 5.0);ui->btn2->setGraphicsEffect(shadow_effect);

再对QCheckBox设置一个阴影效果

QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect(this);shadowEffect->setBlurRadius(5);shadowEffect->setXOffset(2);shadowEffect->setYOffset(2);ui->checkBox->setGraphicsEffect(shadowEffect);

在这里插入图片描述
嵌入式设备,拍照来的,两个按钮,上面的有阴影,下面的没有。
注意,有时候你代码设置了阴影效果,但可能会出现不生效的问题。
这时候注意检查:
1.一个阴影效果“QGraphicsDropShadowEffect ”的对象只能作用在一个部件上,就是说,你new了一个“QGraphicsDropShadowEffect ”的阴影效果对象shadowEffect,只能作用再Label1上做阴影,Label2想用的话,再new一个阴影效果对象去用。好看的帽子,人人都想带的话,只能人人都去买一个;
2.有没有给该部件设置一个背景色,想要阴影效果,需要部件本身有一个可见的背景色的;
3.检查是不是运行程序所处的环境,是不是Qt的库不支持图形效果;
4.检查控件的QWidget::setWindowFlags方法可能被调用,设置了不支持阴影的窗口标记;
5.检查控件是不是可能被嵌入到不支持图形效果的容器中,这个我就遇到过,在同样的一个嵌入式设备中,开始产品主程序设置了阴影效果不生效,以为是缺少了什么渲染的库,后来做个简单demo去测试,阴影效果正常,最后发现产品主程序要设置阴影的部件,嵌入到另一个部件中,层层嵌入和一堆的父窗口设置导致不生效;

最后:阴影效果的渲染如果过多,对于一些配置较低的嵌入式设备,可能回引起卡顿。

http://www.lryc.cn/news/505569.html

相关文章:

  • Python 助力 DBA:高效批量管理数据库服务器的多线程解决方案-多库查询汇总工具实现
  • vue响应式数据-修改对象的属性值,视图不更新
  • 【OpenCV计算机视觉】图像处理——平滑
  • C#编程报错- “ComboBox”是“...ComboBox”和“...ComboBox”之间的不明确的引用
  • JAVA:访问者模式(Visitor Pattern)的技术指南
  • YashanDB共享集群产品能力观测:细节足见功底
  • 【Linux】—简单实现一个shell(myshell)
  • @FeignClient用于Nacos微服务间的接口调用
  • 认识javascript中的模块化
  • 容器设计模式:Sidecar
  • ensp 静态路由配置
  • MATLAB图卷积神经网络GCN处理分子数据集节点分类研究
  • Android-Glide详解
  • 2.Nuxt学习 组件使用和路由跳转相关
  • 代码开发相关操作
  • 动态导出word文件支持转pdf
  • 登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢
  • 【Leetcode Top 100】199. 二叉树的右视图
  • React自学:如何使用localStorage,以及如何实现删除笔记操作
  • go语言使用websocket发送一条消息A,持续接收返回的消息
  • 如何对小型固定翼无人机进行最优的路径跟随控制?
  • C++常见面试题-初级2
  • Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理
  • mfc140.dll是什么东西?mfc140.dll缺失的几种具体解决方法
  • 【STM32 Modbus编程】-作为主设备写入多个线圈和寄存器
  • Windows安全中心(病毒和威胁防护)的注册
  • 微积分复习笔记 Calculus Volume 2 - 4.2 Direction Fields and Numerical Methods
  • 深入理解旋转位置编码(RoPE)及其在大型语言模型中的应用
  • 内网穿透的应用-在OpenWrt上轻松搭建SFTP服务,安全传输文件不再难!
  • 【图像处理lec3、4】空间域的图像增强