QGraphicsDropShadowEffect CPU на встроенной системе - PullRequest
0 голосов
/ 20 сентября 2011

Я создал виджет, который служит своего рода всплывающим окном и, следовательно, должен иметь тень вокруг, чтобы оптически поднять его от фона.Я инициализирую эффект тени в конструкторе моего всплывающего виджета следующим образом:

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

Приложение запускается во встроенной системе с процессором Intel Atom, пользовательским дистрибутивом Linux, Qt v4.7.3, работающим сСервер QWS.Когда я отключаю тень, моя загрузка процессора составляет менее 10%, когда графический интерфейс не используется.Включение тени увеличивает использование процессора более чем на 80%.Профилирование приложения показывает, что большая часть процессорного времени тратится в пределах libQtGui.so.4.7.3.

У кого-нибудь есть идеи, почему использование процессора взрывается таким образом, даже если в графическом интерфейсе абсолютно ничего не происходит, даже мышьдвижение?

Редактировать: Изменение размера всплывающего окна меняет количество использования процессора.Уменьшение размера до четверти сокращает использование процессора примерно до четверти.Очень странно.

1 Ответ

1 голос
/ 13 октября 2011

Проблема была только частично с тенью. Кажется, что перерисовка тени требует довольно много процессорного времени - это нормально, если не перерисовывается слишком часто. Проблема была проста на самом деле. Виджет, который был за этим всплывающим окном, перерисовывался четыре-пять раз в секунду, и, следовательно, всплывающее окно тоже нужно перерисовывать. Это поглотило огромное количество процессорного времени. Решение также простое: избегайте перерисовки событий, если на экране ничего не меняется.

...