0

ある種のポップアップウィンドウとして機能するウィジェットを作成したため、背景から光学的に持ち上げるためにドロップシャドウが周りに必要です。次のように、ポップアップ ウィジェットのコンストラクターでドロップ シャドウ効果を初期化します。

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

このアプリケーションは、Intel Atom CPU、カスタム Linux ディストリビューション、qws サーバーで実行される Qt v4.7.3 を搭載した組み込みシステムで実行されます。ドロップ シャドウを無効にすると、GUI がアイドル状態のときに CPU 使用率が 10% 未満になります。ドロップ シャドウを有効にすると、CPU 使用率が 80% を超えます。アプリのプロファイリングは、CPU 時間のほとんどが 内で費やされていることを示していますlibQtGui.so.4.7.3

マウスの動きでさえ、GUIでまったく何も起こっていないにもかかわらず、CPU使用率がこのように爆発する理由を誰かが知っていますか?

編集:ポップアップのサイズを変更すると、CPU 使用量が変わります。サイズを 4 分の 1 に減らすと、CPU 使用率が約 4 分の 1 に減ります。非常に奇妙な。

4

1 に答える 1

1

問題の一部はドロップ シャドウにのみありました。ドロップ シャドウの再描画にはかなりの CPU 時間が必要なようです。頻繁に再描画しなければ問題ありません。問題は本当に簡単でした。このポップアップの背後にあるウィジェットは、毎秒 4 ~ 5 回再描画されたため、ポップアップも再描画する必要がありました。これにより、大量の CPU 時間が消費されました。解決策も同様に単純です。画面上で実際に何も変化がない場合は、イベントを再描画しないようにします。

于 2011-10-13T06:35:13.137 に答える