Когда вызывается PaintGL QGLWidget?

Все, что я могу найти, это «всякий раз, когда виджет нужно покрасить».

Когда это конкретно?


person Nomis Raserf    schedule 17.07.2013    source источник


Ответы (1)


Когда вы вызываете updateGL() для своего виджета (или update()), или просто Qt решает перерисовать ваш виджет. Причины, по которым Qt может запросить перерисовку, включают:

  • размер вашего виджета изменится
  • ваш виджет скрыт и снова отображается
  • ваш виджет сворачивается, а затем восстанавливается
  • что-то еще помещается перед вашим виджетом, а затем удаляется
  • Луна в третьей четверти
  • далекая бабочка взмахнула крыльями
  • ...

Короче говоря, у вас очень мало контроля над тем, когда Qt запрашивает перерисовку. Только рисуй быстро! :-)

person peppe    schedule 17.07.2013
comment
Дополнительная информация: paintGL() даже не вызывается мгновенно, когда вы звоните updateGL(). Вместо этого Qt ждет и вызывает его позже, когда это необходимо, так что последовательные вызовы updateGL() приводят только к одному вызову paintGL(). - person Boris Dalstein; 18.07.2013
comment
Спасибо! Я не знал о функциях update() и updateGL(). Это все из опыта? - person Nomis Raserf; 18.07.2013
comment
Вы имеете в виду, если это полный список, когда Qt запрашивает перерисовку, кроме пользовательских (т.е. вызова update())? - person peppe; 18.07.2013
comment
Мне просто интересно, откуда у вас информация, так как я не смог найти ничего об этом в Интернете. :) - person Nomis Raserf; 19.07.2013
comment
Документы и исходный код. Документы говорят: Each widget performs all painting operations from within its paintEvent() function. This is called whenever the widget needs to be redrawn, either as a result of some external change or when requested by the application. - person peppe; 19.07.2013
comment
Поэтому я предполагаю, что некоторые внешние изменения в этой цитате могут быть расширены до любых внешних изменений, которые, по мнению разработчиков Qt, требуют перерисовки. И это, как правило, разумно, и перерисовка в любом случае происходит быстро, поэтому не имеет значения, что она вызывается часто. И если я хочу увидеть настоящие мельчайшие детали того, когда он перерисовывается, я могу проверить исходный код. - person Nomis Raserf; 19.07.2013