我创建了一个用作某种弹出窗口的小部件,因此周围应该有一个投影,以便从背景中光学地提升它。我在弹出窗口小部件的构造函数中初始化投影效果,如下所示:
dropshadow = new QGraphicsDropShadowEffect(this);
dropshadow->setBlurRadius(32);
dropshadow->setColor(QColor("#121212"));
dropshadow->setOffset(0,0);
setGraphicsEffect(dropshadow);
该应用程序在带有 Intel Atom CPU 的嵌入式系统上运行,这是一个定制的 Linux 发行版,Qt v4.7.3 与 qws 服务器一起运行。当我禁用阴影时,当 GUI 空闲时我的 CPU 使用率低于 10%。启用投影会将 CPU 使用率提高到 80% 以上。对应用程序进行分析表明,大部分 CPU 时间花费在 libQtGui.so.4.7.3
中。
有谁知道为什么 CPU 使用率会像这样爆炸,即使 GUI 中绝对没有发生任何事情,甚至没有鼠标移动?
编辑:更改弹出窗口的大小会更改 cpu 使用量。将大小减小到四分之一可将 CPU 使用率降低到大约四分之一。很奇怪。
最佳答案
问题只是部分与投影有关。似乎重绘投影需要相当多的 CPU 时间——如果重绘不是太频繁的话,这是可以接受的。问题真的很简单。弹出窗口后面的小部件每秒重绘四到五次,因此弹出窗口也需要重绘。这吞噬了大量的 CPU 时间。解决方案同样简单:如果屏幕上没有真正发生变化,则避免重绘事件。
关于c++ - QGraphicsDropShadowEffect 在嵌入式系统上占用 cpu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484730/