Вопрос

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top