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