A QWidget
jako funkcja paintEvent
, która jest odpowiedzialna za jego rysunek. Aby poprawnie zaimplementować tę funkcję, obiekt QStyle
służy do reprezentowania każdego komponentu i obiektu QStyleOption
w celu zapisania statusu kontrolki.Gdzie zapisać stan animacji QWidget do użycia w funkcjach rysowania QStyle?
E.g: Niestandardowy ScrollBar
wykonuje swoją paintEvent
, która wywołuje drawComplexControl
z opcją "CC_ScrollBar
". Następnie można rozszerzyć QProxyStyle
, aby zmienić wygląd paska przewijania.
Po najechaniu kursorem na użytkownika pojawia się paintEvent
, który stosuje nowy "ukryty" wygląd, którego stan jest zapisany w QStyleOption::state
. Ale na razie widżety dzienne, ten stan nie powinien być natychmiast aktualizowany, ale z płynnym przejściem (animacja) na około 100-500 milisekund. Aby animować widżet przy takim przejściu, potrzebne są pewne wartości, takie jak bieżący stan animacji (a mianowicie qreal
/QColor
?) Dla każdej części przewijania: górna strzałka, dolna strzałka lub suwak.
Po tym wstępie „długa”, moje pytanie przyjść:
Czy istnieje zmienna gdzieś ustawić stan tej animacji? Mogę przedłużyć QStyleOption
z tą nową wartością, ale obecna implementacja już zawiera animację, nie mogę znaleźć miejsca, w którym zapisany został ten stan przejścia.
Poszukuję odpowiedzi kanonicznej.
Uwaga: Aby uniknąć "możliwego duplikatu ...", nawet jeśli jest to mało powiązane, NIE jest to kwestia sposobu korzystania z QAnimation lub tworzenia niestandardowych widgetów.
"Obecna implementacja już zawiera animację" - czy możesz wskazać, gdzie dokładnie widziałeś animację przejścia w domyślnej implementacji Qt? –
@PavelStrakhov: Na przykład QScrollBar: wskaźnik hover (niebieski w Windows 7) każdego komponentu zostanie zastosowany z krótką animacją. Mam na myśli to, że po najechaniu suwakiem, staje się niebieski na około 0.3s. Pozwól mi się dowiedzieć, czy nie możesz tego zobaczyć, a ja zamieszczam każdy krótki przykład. –