У меня есть QScrollArea, порождая мой потрясающий виджет прокрутки. Мне нравится делать обновления на содержании в различных случаях.
Для этого я сделал переопределение paintEvent(QPaintEvent *)
. Затем каждый раз я хочу, чтобы это было сделано, я звоню update()
на виджете.
Проблема: paintEvent()
никогда не называется этим!
Что я попробовал в поиске и устранении неисправностей до сих пор:
repaint()
вместо update()
. Должен назвать его мгновенно. К сожалению, не делает.isVisible()
и updatesEnabled
Кто-либо понял, что проверить затем? Что могло сделать перекрашивание () не, называют paintEvent ()?
Решением является вызов this->viewport()->repaint()
или this->viewport()->update()
из производного класса QAbstractScrollArea
вместо repaint()
или update()
.
Дополнительная информация приведена в документации Qt:
QWidget * QAbstractScrollArea::viewport () const
Возвращает виджет области просмотра. Используйте функцию
QScrollArea::widget()
для получения содержимого виджета области просмотра.
Поскольку содержимое, которое мы имеем в нашем производном классе QAbstractScrollArea
, будет отображаться в виджете viewport, имеет смысл вызвать update или repaint виджета viewport, чтобы снова нарисовать наши данные (вызвать paintEvent
).