Для тех, кто все еще борется с этим и сталкивался с этим постом: вот как я решил это:
Пожалуйста, следуйте примеру перекраски как есть. Если вы посмотрите на код в примере, то заметите, что в конструкторе таймер timeout()
SIGNAL подключен к animate()
SLOT. Если вы внимательно посмотрите на слот animate (), он, в свою очередь, вызывает update()
a.k.a GLWidget::update()
. Если вы следуете документации по GLWidget :: update (); это в свою очередь вызывает paintEvent(...)
.
Этот фон важен и был недостающим элементом моей проблемы. Ранее я использовал paintGL (...) для рисования своей сцены, так как переопределил GLWidget. Чтобы поддерживать анимацию или обновления моей сцены, я подключил таймер к updateGL (). Это, в свою очередь, вызывало paintGL () через glDraw (). Это было основной причиной всех проблем.
Код, который я написал, снова и снова вызывал paintGL (). Следуя примеру перекраски, я полностью избавился от метода paintGL и переключился на методологию рендеринга paintEvent (...). Таким образом, чтобы держать вещи в синхронизации, мне пришлось вызвать update () (вместо updateGL ()), чтобы все работало. В ту минуту, когда я совершил этот переход, все стало работать как положено. (GLWidget::update()
звонки paintEvent(...)
)
Надеюсь, это хоть немного вам помогло. Если это все еще не работает для вас или вам нужны другие объяснения, оставьте мне комментарий здесь, и я постараюсь помочь.