обновлению () или перекрашивание () не удается инициировать paintEvent ()

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

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

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

Что я попробовал в поиске и устранении неисправностей до сих пор:

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

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

15
задан BartoszKP 23 June 2015 в 10:21
поделиться

1 ответ

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

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

QWidget * QAbstractScrollArea::viewport () const

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

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

25
ответ дан 1 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: