2014-02-11 5 views
0

У меня есть код с использованием Qt 4. Я хочу перенести его в Qt 5 и переключиться на QOpenGL. Я не могу понять, где код от void paintGL() и void initializeGL() должен идти в QWindow. Может ли кто-нибудь помочь мне с примером?Перемещение из QGLWidget в QWindow

ответ

1

Я создал простой пример использования QWindow с OpenGL.

Чтобы упростить разработку OpenGL, я создал абстрактный класс GLWindow, который содержит виртуальные функции initializeGL(), paintGL() и resizeGL(int w, int h). Я считаю, что исходный код показывает связь между старым стилем и новым стилем.

Пример можно посмотреть здесь:

https://github.com/mortennobel/QtOpenGLChapter/tree/master/OpenGL3xAlt

+0

Это то, что я искал. Спасибо! – Nazar554

0

Qt имеет at least one example (Overpainting) ставит виджеты поверх сцены OpenGL. Посмотрев на это, кажется, самым простым способом было бы наследовать от QGLWidget вместо QWidget и переопределить соответствующие виртуальные функции для инициализации и рисования.

0

Стандартным примером использования QWindow с OpenGL является hellowindow в qtbase/examples/opengl.

Прямой замены для initializeGL и paintGL нет. Вместо этого вы делаете что-то вроде этого:

  • Имейте QWindow с поверхностным типом OpenGLSurface.
  • Создайте QOpenGLContext с соответствующим форматом.
  • Когда окно получает событие экспонирования, начните рендеринг (makeCurrent, ваши вызовы GL и, наконец, swapBuffers).
Смежные вопросы