QWidget
как paintEvent
функция, которая отвечает за его рисунок. Чтобы правильно реализовать эту функцию, QStyle
Объект используется для представления каждого компонента и QStyleOption
Объект для сохранения статуса элемента управления.
Например: обычай ScrollBar
реализовать его paintEvent
, который называют drawComplexControl
с опцией «CC_ScrollBar
«. Затем, QProxyStyle
может быть расширен, чтобы изменить внешний вид полосы прокрутки.
Когда пользователь наводит ползунок, paintEvent
вызывается, который применяет новый «зависший» вид, состояние которого сохраняется в QStyleOption::state
, Но пока что для дневных виджетов это состояние не должно обновляться мгновенно, а с плавным переходом (анимацией) в течение примерно 100-500 миллисекунд. Для анимации виджета с этим переходом необходимы некоторые значения, например, текущее состояние анимации ( qreal
/QColor
?) для каждой части прокрутки: верхняя стрелка, нижняя стрелка или ползунок.
После этого «длинного» вступления у меня возникает вопрос:
Есть ли где-нибудь переменная для установки состояния этой анимации?? Я мог бы продлить QStyleOption
с этим новым значением, но текущая реализация, кажется, уже включает анимацию, я не могу найти, где сохраняется это переходное состояние.
Я ищу канонический ответ.
Примечание: чтобы избежать «возможного дублирования …», даже если оно немного связано, это НЕ вопрос о том, как использовать QAnimation или создавать собственные виджеты.
Анимации стиля получены из частного QStyleAnimation
(#include "qstyleanimation_p.h"
), и они QAbstractAnimation
и поэтому QObject
, Например, анимация стиля полосы прокрутки QScrollbarStyleAnimation
,
Вот как стиль Windows drawControl
получает указатель на анимацию:
if (QProgressStyleAnimation *animation =
qobject_cast<QProgressStyleAnimation*>(d->animation(opt->styleObject)))
Анимации для различных объектов стиля управляются стилем Pimpl-х animation
, startAnimation
а также stopAnimation
методы. Базовый PIMPL, который определяет эти методы: QCommonStylePrivate
(#include <private/qcommonstyle_p.h>
).
То, как вы будете использовать его в своем собственном стиле, будет следующим:
Извлеките свой стиль из QCommonStyle
, используйте идиому PIMPL и получайте ваш pimpl из QCommonStylePrivate
, Я задокументировал идиому Qt’s PIMPL чтобы было проще.
Повторно используйте один из существующих классов анимации стиля или используйте свой собственный QStyleAnimation
,
Использовать QCommonStyle
Методы PIMPL для управления анимацией. Впрочем, сначала вы должны создать экземпляр анимации.