ich möchte ganz gern für mein fertiges C++/OpenGL-Programm eine GUI mit Hilfe von QT erstellen. Ich habe gelesen, dass man das sich mit dem QT Creator auch mehr oder weiniger zusammenklicken kann.(Was bombig wäre) Ich hab jetzt auch schon die neueste SDK auf meinem Rechner installiert und kleine Tutorials mit qml-Dateien gemacht. Jetzt hab ich auch versucht eine kleine cpp in QT zu öffnen und eine GUI hinzuzufügen. Allerdings geht das irgendwie nicht. Ich versteh nicht ganz wo ich da anfangen soll. Also kompiliert QT auch ganz normal C++/OpenGL-Code? Ich habe auch schon versucht in xcode in meiner cpp qt zu includen und dann einfach zu kompilieren. Das geht aber auch nicht. Kennt vielleicht irgendwer von euch ne seite, wo das nochmal genauer beschrieben wird.Also fertige cpp und dafür im qt-creator ne gui erstellen. Ich danke euch.
Jetzt hab ich auch versucht eine kleine cpp in QT zu öffnen und eine GUI hinzuzufügen.
Qt ist ein Framework, mehr nicht. Was du vermutlich meist ist der QtCreator, eine IDE die du mit dem SDK installieren kannst. Um Fenster und Dialoge zu designen brauchst du eigentlich nur den QtDesigner, welcher ein *.ui-File erzeugt. Wie du dieses dann in deine Anwendung bekommst, ist z.B. hier beschrieben: http://doc.qt.nokia.com/latest/designer ... -file.html Ich nutze normalerweise den "Multiple Inheritance Approach".
Was du wissen musst: Diese *.ui-Files beschreiben deine GUI in XML. Für diese muss C++-Code generiert werden, welchen du dann in dein Programm includen musst. Der einfachste Weg dazu ist die Benutzung von qmake zum compilieren, was zum Teil auch unter obigem Link beschrieben wird. Ich kann dir allerdings nicht sagen wie du qmake mit XCode zusammenbringst. Ich rufe bei mir einfach "qmake" und dann "make" in der Konsole auf, aber ich arbeite auch mit Kate unter Linux, nicht mit XCode unter MacOS. QtCreator benutzt natürlich intern qmake, d.h. damit geht das auch.
Kenntnisse in QML habe ich bisher nicht gebraucht.
Wichtig: Unter MacOS kannst du keine normalen GUI-Elemente als Child eines OpenGL-Widgets haben. Du kannst auch keine GUI-Element über einem OpenGL-Widget platzieren, der Fenstermanager macht das einfach nicht mit. Das funktioniert nur unter Windows und Linux. Man kann aber irgendwie seine GUI-Elemente mit OpenGL rendern lassen, habe ich aber noch nicht erfolgreich hin bekommen.
@ Aya: Danke dir. Muss ich mir mal anschauen. @Coolcat: Danke dir auch. Ich habe leider immer noch nicht alles ganz verstanden. Meine Fragen:
Zitat:
Diese *.ui-Files beschreiben deine GUI in XML. Für diese muss C++-Code generiert werden, welchen du dann in dein Programm includen musst.
Also wenn ich zum Beispiel eine test.ui habe wird mir ja mit qmake im QTCreator eine ui_test.h generiert. Diese include ich dann in meiner cpp? Wenn ich das so richtig verstanden habe.
Also geht es gar nicht eine GUI für OpenGL-Code unter Mac zu generieren? Das hab ich nämlich aus deiner letzten Bemerkung so verstanden. Vielleicht kannst du das nochmal etwas erklären.
Zitat:
Wichtig: Unter MacOS kannst du keine normalen GUI-Elemente als Child eines OpenGL-Widgets haben. Du kannst auch keine GUI-Element über einem OpenGL-Widget platzieren, der Fenstermanager macht das einfach nicht mit. Das funktioniert nur unter Windows und Linux. Man kann aber irgendwie seine GUI-Elemente mit OpenGL rendern lassen, habe ich aber noch nicht erfolgreich hin bekommen.
Vielleicht gibt es auch irgendwie nochmal ein kleines Minibeispiel, wo man OpenGL/C++ und QT-Code hat. So dass man den Zusammenhang sieht. Das kann ich nämlich irgendwie nicht finden.
Also das ist mir alles noch ein Rätsel wie ich das verknüpfen kann. Ich muss dazu sagen, dass ich noch NIE etwas mit GUI-Programmierung gemacht habe. Also entschuldigt auch eventuell dumm wirkende Fragen.
Also wenn ich zum Beispiel eine test.ui habe wird mir ja mit qmake im QTCreator eine ui_test.h generiert. Diese include ich dann in meiner cpp? Wenn ich das so richtig verstanden habe.
Ja, hast du richtig verstanden.
Zitat:
Also geht es gar nicht eine GUI für OpenGL-Code unter Mac zu generieren?
Was ich sagen wollte: Es ist problemlos möglich GUI-Elemente zusammen mit einem QGLWidget zu benutzen. Gut, der QtDesigner kann das nicht, aber du kannst dieses eine Element manuell in deinem Code hinzufügen. Was nicht möglich ist, ist z.B. einen Button an ein QGLWidget zu hängen. Also das QGLWidget darf keine Kinder haben. Es könnte ja sein das du etwa ein QGLWidget als Hintergrund für ein Menü benutzen willst. Das geht nicht, bzw. nicht einfach so.
Beispiel aus meiner Diplomarbeit: (zum vergrößern klicken) Die 4 Ansichten sind QGLWidget's. Das Menü und die Toolbars oben links sind ganz normale Widget-Elemente. Was aber auf MacOS nicht möglich ist sind Buttons über einem QGLWidget, wie hier die Buttons innerhalb jeder der 4 Ansichten. Deshalb habe ich diese Buttons jeweils als Quad mit einer Textur gerendert und die Mausevents selbst implementiert. Damit der Text in den beschrifteten Buttons die Systemfont benutzt verwende ich ein Offscreen-Label mit QPixmap::grabWidget(&label), welches wiederum via QGLWidget::bindTexture(pixmap) zu einer Textur gemacht wird. Blöde Lösung aber da ich nur Buttons gebraucht habe relativ schnell gemacht. Der Nutzer merkt keinerlei Unterschied. Popup-Menüs und Tooltips kann Qt aber sehr wohl über ein QGLWidget rendern, man muss sie eben nur manuell auslösen.
Zitat:
Also das ist mir alles noch ein Rätsel wie ich das verknüpfen kann.
Wie du deine GUI mit deiner Anwendung verbindest weißt du? Wenn nicht schau dir Signals und Slots an.
Zitat:
Vielleicht gibt es auch irgendwie nochmal ein kleines Minibeispiel, wo man OpenGL/C++ und QT-Code hat. So dass man den Zusammenhang sieht.
void resizeGL(int width, int height); // Größe hat sich geändert, glViewport aufrufen, Projektion neu berechnen, etc.
Da drin kannst du ganz normal OpenGL-Befehle ausführen. Um den Aufruf von glFlush/glFinish/swapBuffers musst du dich nicht kümmern, das macht Qt für dich.
Vielen vielen Dank Coolcat! Nach einigem Rumwurschteln hab ich nun endlich meine ersten kleinen Beispiele ausprobiert und alles hat geklappt. Jetzt bin ich dabei mein etwas größeres Projekt anzupassen. Also vielen Dank nochmal für die Einführung. Hat mir echt geholfen.
Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.