2011-09-20 40 views
0

我創建了一個用作某種彈出窗口的小部件,因此應該有一個全方位的陰影以將其從背景中光學升起。我初始化我的彈出式窗口小部件的構造函數的陰影效果如下:QGraphicsDropShadowEffect在嵌入式系統上佔用cpu

dropshadow = new QGraphicsDropShadowEffect(this); 
dropshadow->setBlurRadius(32); 
dropshadow->setColor(QColor("#121212")); 
dropshadow->setOffset(0,0); 
setGraphicsEffect(dropshadow); 

應用程序與英特爾Atom處理器,定製的Linux發行版在嵌入式系統上運行,QT v4.7.3與QWS服務器上運行。當我禁用陰影時,當GUI空閒時,我的cpu使用率低於10%。啓用投影會將CPU使用率提高到80%以上。分析該應用程序顯示,大部分CPU時間花費在libQtGui.so.4.7.3之內。

有沒有人有一個想法,即使在GUI中絕對沒有任何事情發生,甚至沒有鼠標移動,爲什麼CPU使用會爆炸這樣?

編輯:更改彈出窗口的大小會改變CPU使用量。將尺寸縮小到四分之一,可將CPU使用量降低到四分之一左右。很奇怪。

+1

並不奇怪。可能實現的陰影效果會隨着像素數量的增加而增加:)而「閒置」是什麼意思? Qt/E會一直重新繪製屏幕,​​或者觸發重繪,methinks。 – Torp

+0

嗯,我相信Qt是足夠聰明的,不會一直重繪,尤其是在嵌入式系統中,只要沒有任何變化,即沒有鼠標移動,沒有可見部件的變化等。否則,CPU使用率將全部爲100%時間,會不會? – arne

+0

彈出窗口中是否有閃爍的光標? – alexisdm

回答

1

問題只是部分與投影。看起來,重繪陰影需要相當多的CPU時間 - 如果不太頻繁地重畫,這是可以的。問題很簡單。這個彈出窗口後面的小部件每秒重繪4到5次,因此彈出窗口也需要重新繪製。這吞噬了大量的CPU時間。解決方案同樣簡單:如果屏幕上沒有真正改變,請避免重新繪製事件。

+0

不幸的是,如果事物在彈出窗口內被繪製,則投影也會導致高CPU負荷,例如,閃爍的光標。雖然投影不會改變,但它始終都會重新繪製。 – Ber

+0

@Ber:多麼不幸。我當時不知道,也沒有注意到。 – arne