使用QGraphicsDropShadowEffect添加阴影后,如何不让子类继承该阴影的方法

本文详细介绍了在Qt中为控件添加阴影的三种方法:使用背景图片、重写painterEvent()函数及利用QGraphicsDropShadowEffect类。重点讲解如何仅对父类控件添加阴影而不影响子类,包括设置属性、实例化阴影对象及调整布局。

在Qt中实现给控件添加阴影一般有三种方法:

1、使用带有阴影图片作为空间的背景图片,这种方法开发起来比较简单,但前期需要准备图片;

2、重新绘图函数painterEvent(),代码实现效率比第一种高,但还是有些麻烦,需要自身的方向感比较强,不然就会让你晕头转向,呵呵;

3、使用Qt自带的QGraphicsDropShadowEffect类,这种方法最简单,但有一个恶心的地方就是,如果对父类使用了该类,那么子类也会继承。。。,这个对于只需要对父类添加阴影的页面简直就是噩梦。接下来,本文将介绍一种只对父类控件添加阴影,而子类不受影响的方法。

首先,假设有一个QWidget的控件被实例化为widget,设置其属性可以参考如下:

#widget
{
	background-color: rgb(243, 243, 243);    //随便设置一种底色,也可以不去设置
	border-radius:20px 20px;                  //指定圆角的半径
}

上面的属性只会对widget这个控件有效。

接下来,在界面的cpp文件的构造函数中添加阴影的代码,如下:

    //设置窗口无边框
    setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
    //设置窗体透明,防止边距显示不同的颜色
    this->setAttribute(Qt::WA_TranslucentBackground, true);
    //实例阴影shadow
    QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
    shadow->setOffset(0, 0);
    shadow->setColor(Qt::gray);
    shadow->setBlurRadius(30);
    ui->widget->setGraphicsEffect(shadow);
    ui->horizontalLayout->setMargin(10);    //重要,设置阴影的距离

至此就可以运行自己的程序了,我做的效果如下:

最后,总结一下,就是需要在设置父类属性时带上自己实力化的对象,设置的属性不能影响到子类就可以。

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值