Подтвердить что ты не робот

Update() или repaint() не запускает paintEvent()

У меня есть QScrollArea, отцом моего удивительного виджета прокрутки. Мне нравится делать обновления по содержимому в различных случаях.

Для этого я сделал переопределение paintEvent(QPaintEvent *). Затем каждый раз, когда я хочу, чтобы это было сделано, я вызываю update() в виджет.

Проблема: paintEvent() никогда не вызывается этим!

То, что я пробовал в устранении неполадок до сих пор:

  • Используйте repaint() вместо update(). Должно называть это мгновенно. К сожалению, нет.
  • Тест для isVisible() и updatesEnabled
  • Проверьте, верно ли мое переопределение. Изменение размера окна вызывает мою функцию. Только мои ошибки обновления вручную(), repaint() завершаются с ошибкой.
  • Внедрение QTimer для запуска обновления() или перерисовки() каждые 500 мс. Триггер дает текстовый вывод, функция не вызывается.

Кто-нибудь понял, что проверить дальше? Что может сделать repaint() не вызвать paintEvent()?

4b9b3361

Ответ 1

Решение состоит в вызове this->viewport()->repaint() или this->viewport()->update() из вашего производного класса QAbstractScrollArea вместо repaint() или update().

Дополнительная информация приведена в Документация Qt:

QWidget * QAbstractScrollArea::viewport () const

Возвращает виджет видового экрана. Используйте функцию QScrollArea::widget() для получения содержимого виджета видового экрана.

Поскольку содержимое, которое у нас есть в нашем QAbstractScrollArea производном классе, будет отображаться в виджетах видовых экранов, имеет смысл вызвать обновление виджета видового экрана или перерисовать, чтобы снова нарисовать наши данные (назовем наш paintEvent).