使用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);    //重要,设置阴影的距离

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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值