Frage

Ich bin ein Programm in OpenGL zu schreiben, und ich brauche eine Art Symbolleiste Schnittstelle. Meine ersten Reaktionen waren eine GUI verwenden, dann eine weitere Untersuchung in C ++ Ich erkannte, dass GUIs sind abhängig von der OS Sie verwenden (Ich bin auf Windows). Deshalb entschied ich mich QT zu verwenden, um mir zu helfen.

Meine Frage ist, wenn ich die beste / geeigneten Ansatz zu dieser Lösung nehme. Bin ich sogar in der Lage meine OpenGL Programm zu schreiben und die GUI I-Schnittstelle mit dem C erstellen möchten ++ Code zu tun, was ich will, es zu tun.

Zum Beispiel, wenn ich ein einfach „Control Panel“ mit Pfeilen in jede Richtung. Und auf dem Bildschirm habe ich ein Box-Objekt durch Schwemme erstellt wird, kann ich die Pfeile Schnittstelle auf angeklickt werden und die Interaktion mit dem openGL Programm, um das Feld zu bewegen?

War es hilfreich?

Lösung

Qt zu verwenden ist für Ihr Problem kohärente: es gute Integration von OpenGl durch das QtOpenGL Modul bietet

.
  1. Leiten Sie Ihre Anzeige Klassen von QGLWidget (bis Qt 4.8) oder von QOpenGLWidget (seit Qt 5.4) und implementieren virtuelle Methoden paintGL() etc.
  2. Sie haben Zugriff auf das Systemsignal und Slot Qt, so dass Sie Gui in der Lage, Ereignisse zu fangen und die OpenGl Anzeige zu aktualisieren.

Andere Tipps

Sie können die regelmäßige Verwendung von nicht-OpenGL Qt-Widgets auf einem QGLWidget so, was Sie beschreiben, ist machbar.

Eine Sache, die ich über kam, als dies zu tun war, dass die regelmäßigen Widgets undurchsichtig sein mußten. In dem Moment, sie in irgendeiner Weise transparent war es gab alle Arten von Müll unter ihnen. Das war vor einer Weile so vielleicht die neueste Version behebt dieses Problem. wurde plattformspezifischen zu können, so YMMV.

Bleiben Sie in GLUT. Es gibt keine Notwendigkeit Qt für ein Bedienfeld hinzuzufügen. Sie könnten ein Unterfenster öffnen (oder zweites Fenster, je nachdem, was für Ihre Programmgestaltung besser funktioniert) und die Kontrollen in dieses Fenster ziehen, und verwenden Sie GLUT die Maus-Interaktion zu behandeln.

Darüber hinaus Qt und GLUT haben jeweils ihre eigenen Ereignisschleifen. So verwenden Sie nur Ereignisschleife von Qt, würden Sie viel von der GLUT-Struktur verlassen müssen, da die GLUT Ereignisschleife nicht da sein würde Ihre Callback-Funktionen aufzurufen. Qt hat die Funktionalität muss jemand andere Ereignis-Schleife aufrufen Ereignisverarbeitung Code Qt haben lassen, aber ich glaube nicht, dass es eine einfache Möglichkeit, GLUT Hand vom Ereignisinformation zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top