Несколько причин, по которым в Qt5 некоторые виджеты могут мерцать при изменении внешнего вида:
- Задержка между заливкой фона и отрисовкой содержимого. 2 Если процесс перерисовки происходит медленно, например, если сперва производятся вычисления (например, форматирование текста), то задержка может быть достаточно ощутимой для человеческого глаза. 2 Чем дольше эта задержка, тем сильнее будет мерцание. 2
- Неверное определение области перерисовки. 5 Например, если не верно реализована функция boundingRect(). 5
Чтобы избежать мерцания, можно попробовать следующее:
- Сообщить Qt, что у виджета статическое содержимое. 2 Для этого нужно использовать флаг WStaticContents. 2
- Самостоятельно заливать фон. 2 Для этого в конструктор QWidget передают два флага: WRepaintNoErase (запрещает Qt заливать фон, когда виджет обновляется, прокручивается и т. п.) и WResizeNoErase (запрещает Qt заливать фон при изменении размеров виджета). 2
- Использовать двойную буферизацию. 2 Мерцания можно избежать, если не будет паузы между заливкой фона и отрисовкой содержимого виджета. 2