OpenGL / C ++ / Qt - нужен совет - PullRequest
4 голосов
/ 10 ноября 2009

Я пишу программу на OpenGL и мне нужна какая-то интерфейсная панель инструментов. Сначала я использовал GUI, а затем продолжил исследование C ++. Я понял, что GUI зависят от используемой вами ОС (я на Windows). Поэтому я решил использовать QT, чтобы помочь мне.

Мой вопрос заключается в том, принимаю ли я наилучший / подходящий подход к этому решению. Могу ли я даже написать свою программу OpenGL и иметь графический интерфейс пользователя, который я хочу создать интерфейс с кодом C ++, чтобы делать то, что я хочу.

Например, если я создам простую «панель управления» со стрелками в каждом направлении. И на экране у меня есть объект box, созданный glut, могу ли я соединить стрелки, по которым нужно щелкнуть, и взаимодействовать с программой openGL, чтобы переместить бокс?

Ответы [ 3 ]

7 голосов
/ 10 ноября 2009

Использование Qt является последовательным для вашей проблемы: оно обеспечивает хорошую интеграцию OpenGl через модуль QtOpenGL.

  1. Получите классы отображения от QGLWidget (до Qt 4.8) или QOpenGLWidget (начиная с Qt 5.4) и реализуйте виртуальные методы paintGL() и т. Д.
  2. У вас будет доступ к системе сигналов и слотов Qt, чтобы вы могли перехватывать события Gui и обновлять дисплей OpenGl.
0 голосов
/ 10 ноября 2009

Оставайтесь в глюте. Нет необходимости добавлять Qt для панели управления. Вы можете открыть подокно (или второе окно, в зависимости от того, что лучше подходит для дизайна вашей программы), и нарисовать элементы управления в этом окне, и использовать GLUT для обработки взаимодействия с мышью.

Кроме того, каждый Qt и GLUT имеют свои собственные циклы событий. Чтобы использовать только цикл событий Qt, вам придется отказаться от большей части структуры GLUT, так как цикл событий GLUT не будет там для вызова ваших функций обратного вызова. У Qt есть функциональность, позволяющая кому-то другому в цикле событий вызывать код обработки событий Qt, но я не думаю, что есть простой способ заставить GLUT передать информацию о событии.

0 голосов
/ 10 ноября 2009

Вы можете использовать обычные не-OpenGL Qt виджеты поверх QGLWidget, так что то, что вы описываете, выполнимо.

Одна вещь, с которой я столкнулся при этом, заключалась в том, что обычные виджеты должны быть непрозрачными. В тот момент, когда они стали прозрачными, под ними появился мусор. Это было некоторое время назад, поэтому, возможно, последняя версия решает эту проблему. Может быть, также зависит от платформы, поэтому YMMV.

...