I have a QScrollArea fathering my awesome scrolling widget. I like to do updates on the contents on various occasions.
For this I did an override of paintEvent(QPaintEvent *)
. Then everytime I want it to be done I call update()
on the widget.
Problem: paintEvent()
is never called by this!
What I tried in troubleshooting so far:
repaint()
instead of update()
. Should call it instantanously. Unfortunately does not.isVisible()
and updatesEnabled
Anybody got an idea what to check next? What could make repaint() not call paintEvent()?
The solution is to call this->viewport()->repaint()
or this->viewport()->update()
from your QAbstractScrollArea
derived class instead of just repaint()
or update()
.
More info is given in Qt documentation:
QWidget * QAbstractScrollArea::viewport () const
Returns the viewport widget. Use the
QScrollArea::widget()
function to retrieve the contents of the viewport widget.
Since the contents that we have in our QAbstractScrollArea
derived class will be displayed in the viewport widget, makes sense to call viewport widget's update or repaint to draw our data again (have our paintEvent
called).