QGraphicsDropShadowEffect带来的cpu占用过高

希望大家慎用QGraphicsDropShadowEffect啊!!!

在本人开发一款简单的音乐播放器时,为了让无标题窗口有一定的立体感,在主窗口外面套了一层Qwidget(设置为透明),并在原来的widget上加载QGraphicsDropShadowEffect,实现窗口阴影效果,如下图:

 实现代码片段如下:

QGraphicsDropShadowEffect* shadow=new QGraphicsDropShadowEffect(this);
shadow->setOffset(0,0);
shadow->setColor(Qt::black);
shadow->setBlurRadius(15);//设置阴影圆角
ui->widget_shadow->setGraphicsEffect(shadow);//QGraphicsEffect的子类只能在一个QWidget中安装一次 再次调用setGraphicsEffect时 之前安装的效果将被卸载

开发初期没什么问题,效果也很好。

但随后功能的增多使得问题暴露了出来(比如上图中使用滚轮滚动列表时):

cpu占用率高的惊人,而且这仅仅是最基础的功能而已。

后来经过分析认为,是有高刷新频率的控件使得重绘事件调用频率过高导致的,因此适当降低了滚动字幕的刷新频率。但cpu占用率仍居高不下,我为此苦恼了两周。

在昨天我偶然查到了一篇博客,设控件背景色透明的程序效率问题_soonsnipe的专栏-CSDN博客,让我若设置背景透明的控件显示的值不需要改变,或者改变的频率很低,则无太大影响,若背景色透明的控件的值频繁改变,如一秒中取一次系统时间并赋值给控件的text,则CPU占用率会提高10%,慎用。估计是因为当控件的值改变后程序会重新绘制整个控件,保证控件上没有被新值遮挡的区域保持透明。https://blog.csdn.net/soonsnipe/article/details/2572030

让我联想到了透明控件和effect使用过多的问题。

于是今天经尝试,10min解决了两周都没想出解决方案的问题!

实际解决方案:

1、少用透明背景,例如StyleSheet中的rgba(0,0,0,0);

2、尽量不要在父窗口/控件使用effect或animation;

目前尚不清楚QGraphicsDropShadowEffect在高刷新率导致cpu占用率高的原因,希望有大神能解释清楚!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值