0
点赞
收藏
分享

微信扫一扫

C++STL之list(用法超详解)

灯火南山 2024-12-19 阅读 7

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去测试,阴影效果正常,最后发现产品主程序要设置阴影的部件,嵌入到另一个部件中,层层嵌入和一堆的父窗口设置导致不生效;

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

举报

相关推荐

0 条评论