-
1. Data: 2011-06-13 18:45:40
Temat: qt, odświeżanie elementu QListView
Od: Kicer <...@...c>
Witam
mam klasę dziedziczącą po QListiew.
Mam też klasę dziedziczącą po QStyledItemDelegate uzywanej jako delegat do
rysowania elementów listy.
Delegat z kolei wyrysowuje obiekty klasy dziedziczącej po QWidget (itemy
listy).
Itemy są stworzene w momencie gdy do modelu, którego uzywa lista, dodawany
jest nowy element. Wszystko ładnie, pięknie, ale chciałbym w itemach
wyświetlać animowane svg. Używam QSvgRenderer, który ładnie strzela mi
sygnałem (repaintNeeded). Wywołuję w itemie update() ale paintEvent nie
wywołuje się. repaintNeeded połączyłem z update, ale mialem też wersję z
własnym slotem w którym wywoływalem update - dzięki temu mam pewność ze
udate się wywołuje a paintEvent (które mam przeładowane) nie.
Mój paintEvent jest odpalany tylko gdy scroluję listę, zmieniam jej rozmiar,
jeżdżę po elementach etc. Widać wtedy kolejne klatki animacji svg.
Zgaduję że item się nie przeładowuje ponieważ nie jest bezpośrednio częscią
layoutu żadnego widgetu/okna. W delegacie wywołuję:
itemWidget->render(delegatePainter, QPoint() );
jak poinformować delegata/listę, żeby odświeżanie itemów odbywało się na ich
rządanie?
pozdrawiam
--
Michał Walenciak
gmail.com kicer86
http://kicer.sileman.net.pl
gg: 3729519