Как QWindow заменить QGLWidget?

QT сообщает, что с qt5 вы должны использовать классы QOpenGL * вместо QGL *.

Проблема в том, что замена QGLWidget отсутствует. Я понял, что вместо этого вы должны использовать QWindow в сочетании с QOpenGLContext и вызов setSurfaceType (OpenGLSurface);

Проблема только в том, что QWindow не может иметь QWidget как родительский. Итак, как я могу встроить QWindow aka. моя поверхность рисования OpenGL в других виджетах?

Ответы

Ответ 1

QT 5.1 находится в странной ситуации OpenGL и QWidget (и производной) мудрой. Нет замены QGLWidget, но все остальные классы QGL имеют явные замены.

Если вы не хотите использовать старый QGLWidget, вам действительно нужно произвести замену с помощью QWindow. Итак, сначала вы настроили свой QWindow, а затем, как вы правильно сказали, вызовите setSurfaceType( OpenGLSurface );, прежде чем вы назовете create(); на нем. Затем вы создаете новый QOpenGLContext и используете его функцию makeCurrent() и передаете QWindow. Затем вы создаете QWidget из QWindow, используя QWidget::createWindowContainer(window);

Но это только временный взлом, который вам не нужно использовать, если вы действительно не хотите смешивать QtQuick с QWidget. Затем вы можете заменить этот временный взлом фактической заменой в 5.2.0 5.4.0 называется QOpenGLWidget