Как Qt оживляет QProgressBar? - PullRequest
0 голосов
/ 02 июля 2018

В некоторых стилях Qt 5 (таких как Breeze) индикаторы выполнения, которые находятся в неопределенном состоянии (минимум == максимум), показывают анимацию.

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

К моему удивлению, я не нашел там никакого анимационного кода. Там нет таймеров. Нет фильтра событий.

Как реализована эта анимация?

1 Ответ

0 голосов
/ 02 июля 2018

Волшебная пыль - это метод QStyle :: polish . Он вызывается для виджетов, включая экземпляры QProgressBar.

Стиль Breeze устанавливает собственную логику анимации. Индикаторы выполнения обрабатываются Breeze :: BusyIndicatorEngine . Он использует QPropertyAnimation для повышения своего внутреннего значения.

Его registerWidget метод вызывается из polish реализации стиля Breeze. Это в свою очередь сохраняет виджет на внутренней карте.

Когда внутреннее значение обновляется анимацией, карта повторяется, и update вызывается для всех виджетов, которые в данный момент анимируются (с использованием косвенного обращения через QMetaObject).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...