я столкнулся с этой проблемой и знал, что ее можно решить лучше.
При наложении QGLWidget (контекстного представления Qt OpenGL )на виджеты Qt, Qt перерисовывает эти виджеты после каждого кадра Qt.
Qt не предназначен для постоянной перерисовки целых окон со скоростью >60 кадров в секунду, так что это очень медленно.
Заставьте Qt использовать что-то другое для рисования :прозрачной текстуры. Заставьте OpenGL использовать эту текстуру всякий раз, когда он перерисовывает и рисует ее поверх всего остального. Заставьте Qt перенаправлять все взаимодействия с контекстным представлением OpenGL на виджеты, нарисованные на текстуре.
Преимущество заключается в том, что Qt должен перерисовывать только всякий раз, когда это необходимо (, например. виджет наводится или щелкается, или текстовый курсор в текстовом поле мигает ), и может выполнять частичную перерисовку, что происходит быстрее.
Как к этому подступиться? как я могу сказать Qt рисовать текстуру? как я могу перенаправить взаимодействие с виджетом на другой (, например. если я наведу указатель мыши на область в контекстном представлении, где флажок находится в нарисованном текстурном виджете -–-, Qt должен зарегистрировать это событие для флажка и перерисовать, чтобы отразить его наведенное состояние)