setGeometry()
и raise()
должны автоматически вызывать paintEvent
для соответствующих виджетов.
Я думаю, что большинство собственных виджетов Qt при необходимости вызывают update()
. В пользовательских виджетах вы вызываете update()
всякий раз, когда что-то видимое меняется. Например, если у вас есть собственный класс Label (который не наследуется от QLabel
и, следовательно, не использует возможности QLabel
для изменения текста и / или изображения), вы вызываете update()
всякий раз, когда вы меняете содержимое, так что новый контент будет отображаться на экране.
Осторожно: вы не должны использовать repaint()
для виджетов, если перерисовка не является критичной по времени. repaint()
вызывает выдачу paintEvent
виджету в тот момент, когда он вызывается, тогда как update()
просто ставит в очередь paintEvent
для выдачи в следующий раз, когда процесс достигает основного цикла. Это позволяет движку рисования собирать несколько paintEvent
с для одного и того же виджета и выдавать только одно объединенное событие. Таким образом, использование repaint()
может реально повлиять на производительность.