C++ einfache GUI erstellen

L

LogBoGgED

Neues Mitglied
Thread Starter
Dabei seit
03.09.2009
Beiträge
10
Reaktionspunkte
0
Hallo allerseits,

ich hoffe ihr könnt mir bei einem kleinen "Problem" weiterhelfen. Ich suche schon einige Stunden nach einer Möglichkeit, eine einfache GUI (z. B. in Form einer MessageBox) mit "purem" C++ zu erstellen.

Dabei fallen ja immer wieder die Schlagworte Qt, Cocoa, Carbon, Objective-C usw...

Ich kenne mich in der C++ - Welt noch nicht so gut aus, nehme aber an dass es sich dabei um Frameworks handelt.

Ich suche aber einen Weg eine MessageBox *ohne* Framework zu erstellen.

Sprich: ich brauche dafür keine besonderen Bibliotheken um die MessageBox zu erstellen.

Wisst ihr da einen relativ einfachen Weg? Könnt ihr mir vielleicht Tutorials oder Bücher zu diesem Thema empfehlen?
Oder ist das Thema wirklich *so* komplex dass man ohne ein Framework wirklich total aufgeschmissen ist?

Viele Grüße
Andreas
 
Hallo Andreas,

da die C++ Laufzeitumgebung keine Bibliotheken für grafische Benutzeroberflächen mitbringt (ich rede hier von der Stdlib), wirst Du um ein Framework nicht herumkommen. Für C++ hat sich da plattformübergreifend Qt durchgesetzt.

Aber vorher solltest Du Deine Begriffswelt etwas sortieren ;)

C++ und Objektive C sind Programmiersprachen
Cocoa, Carbon und Qt sind Frameworks.
"Pures" C++ bedeutet C++ + Stdlib + STL.

Und eine Rückfrage: Warum C++?
 
Es geht nicht. C++ kann keine Grafik. Deswegen brauchst du schon mal ein Framework um zu zeichnen. Dann müsstest du damit den Knopf malen, also ein Rechteck, mit Rahmen und Farbe gefüllt. Schaut blöd aus. Dann musst noch überwachen ob der Mausklick genau innerhalb vom Rechteck ist. Usw.
Tip: Nimm Qt, wennst mit C++ arbeiten willst. Oder du lernst Objective-C, dann kannst schön mit Cocoa arbeiten.

Ich hab mal sowas selbst gemacht, ist aber ca. 20 Jahre her. Damals gab es kein Windows. Das war sehr aufwändig, ich musste die einzelnen Pixel direkt in den Grafikkartenspeicher schreiben, weil es nichtmal einfache Grafikbibliotheken gab. Das alles unter Turbo-C.
 
Hallo ihr beiden,

vielen Dank erstmal für eure schnellen Antworten, auch wenn diese leider etwas enttäuschend sind.
Was ich noch nicht ganz verstehe.. unter "Framework" hab ich bisher verstanden, dass innerhalb einer Programmiersprache Funktionen bereitgestellt werden, die aber den eigentlichen "Umfang" der Programmiersprache nicht erweitern. Ich bin eigentlich in der Web-Programmierung tätig, dort gibt es z. B. JQuery als Javascript-Framework. Man könnte aber alle Funktionen von JQuery auch mit purem Javascript "nachbilden". Wäre zwar ein Haufen Aufwand, aber theoretisch immerhin möglich.

Heißt das nun, dass es mit C++ überhaupt nicht möglich ist solche grafischen Sachen zu erzeugen? Oder wäre es nur verdammt aufwendig?

Der Grund meiner Frage ist übrigens folgender: meine Freundin studiert momentan Mechatronik und muss dabei auch eine Informatik-Vorlesung besuchen, bei der mit C++ programmiert wird. Ich habe mir gedacht dass ich ihr C++ vielleicht etwas schmackhafter machen könnte wenn sie sieht, was man damit so Tolles anstellen kann ;-)
Außerdem bringe ich mir sozusagen gerade selbst C++ bei damit ich ihr beim Lernen helfen kann. Damit das Ganze für mich nicht "umsonst" ist dachte ich, dass ich meine C++-Kenntnisse vielleicht gleichzeitig etwas anreichern könnte, das abseits der Kommandozeile seinen Platz findet ;-)

Wenn ich also mit C++ (speziell für Mac OS) grafische Oberflächen erzeugen möchte, wären also entweder Qt oder Cocoa die richtigen Kandidaten, richtig?

Wie einfach (oder umständlich) sind solche Frameworks denn zu integrieren? Muss ich mir das so vorstellen, dass ich mir z. B. eine "qt.h"-Datei herunterlade und dann einfach mit einem #include <qt.h> einbinde?
Entschuldigt wenn das vielleicht etwas zu "plumb" gedacht ist. Wie gesagt, ich komme aus der Web-Programmierung. Ich kenn nur sowas wie "<?php include 'bla.php'; ?>" oder "<script type='text/javascript' src='jquery.js'></script>" ;-)

Viele Grüße
Andreas
 
LogBoGqED schrieb:
Wie einfach (oder umständlich) sind solche Frameworks denn zu integrieren? Muss ich mir das so vorstellen, dass ich mir z. B. eine "qt.h"-Datei herunterlade und dann einfach mit einem #include <qt.h> einbinde?
Entschuldigt wenn das vielleicht etwas zu "plumb" gedacht ist. Wie gesagt, ich komme aus der Web-Programmierung. Ich kenn nur sowas wie "<?php include 'bla.php'; ?>" oder "<script type='text/javascript' src='jquery.js'></script>" ;-)

In etwa so. Wenn man sich von hier das Qt-SDK heruntergeladen hat ist das mit dem QtCreator eigentlich recht einfach.
 
Bei Qt hast du den Vorteil dass dein Programm dann auch auf Windows und Linux läuft (natürlich dort kompilieren).
 
Zuerst: ich finde es schön, dass Du Deiner Freundin helfen willst. Nun ist es in meiner Anschauung so, dass grafische Programmierung in C++ erst sinnvoll ist, wenn man die Grundlagen Sprache sicher beherrscht. C++ gehört zu den komplexeren Sprachen. Hinzu kommt, dass Qt als Framework auch nicht so einfach mal zu benutzen ist. Qt unterliegt einer eigenen Philosophie, die man auch erst richtig versteht, wenn man etwas mehr Erfahrungen in der Programmierung hat. Für den Einsteiger ist es zu komplex. Ich möchte Dich nicht entmutigen, aber so einfach ist es eben nicht.

@Tobbles: Vergiss nicht, dass der TO keinerlei Erfahrungen mit C++ hat. Speichermanagement, Objektorientierung, Namensräume, Templates und vieles mehr sind ihm gänzlich unbekannt. C++ ist *keine* Einsteigersprache! (Sorry Andreas, aber trotz PHP und JS bist Du Anfänger)
 
@Tobbles: Vergiss nicht, dass der TO keinerlei Erfahrungen mit C++ hat. Speichermanagement, Objektorientierung, Namensräume, Templates und vieles mehr sind ihm gänzlich unbekannt. C++ ist *keine* Einsteigersprache! (Sorry Andreas, aber trotz PHP und JS bist Du Anfänger)

Erstmal danke für deine erneute Antwort.

Ich würde aber gerne noch etwas klarstellen, wo ich mich vielleicht etwas falsch ausgedrückt habe. Ich bin zwar Beginner was C++ angeht, aber Speichermanagement, Objektorientierung, Namensräume etc. sind mir nicht gänzlich unbekannt. Ich hab drei Semester Wirtschaftsinformatik hinter mir (das war vor einem halben Jahr, seitdem bin ich in der Webprogrammierung), da mussten wir mit C programmieren.
Somit sind bei mir die Grundlagen schonmal gefestigt, was mich auch motiviert mich jetzt mit C++ zu beschäftigen.

Ich muss auch sagen, dass mir die Programmierung mit Javascript und PHP durchaus geholfen hat die Logik von C++ besser zu verstehen (genauso war es auch andersherum, als ich nach den drei Semestern in die Praxis wechselte), auch wenn die Sprachen ihr eigenes Anwendungsgebiet haben.
Aber letzten Endes sind es doch alles nur Programmiersprachen. Ich finde es kommt darauf an wieviel Fleiß man hineinsteckt, um eine Sprache zu erlernen. Dann ist es eigentlich irrelevant ob man sich mit einer Web-Programmiersprache oder mit einer höheren Programmiersprache beschäftigt.

Vielleicht könntet ihr mir noch eine Frage beantworten: was würde es mir im Endeffekt "bringen", mich mit reinem C++ zu beschäftigen? Was kann man damit beispielsweise für coole Sachen machen? Das hab ich noch nicht ganz verstanden.. was bringt mir eine Programmiersprache, wenn ich damit keinerlei grafischer Oberflächen erzeugen kann?
 
was bringt mir eine Programmiersprache, wenn ich damit keinerlei grafischer Oberflächen erzeugen kann?

Man nimmt halt immer ein Framework, dann musst du die Sprache halt können. Der Linux-Kernel hat einige Millionen Zeilen C-Code und hat keine GUI. Auch Serverprogramme brauchen keine GUI.
Wenn du fürn Mac programmieren willst und eine GUI brauchst, kommst du um Cocoa eh nicht rum. Und Objective-C.
 
Zuerst sorry dass ich Dich da falsch eingeschätzt habe. Zu deinen Fragen:

Vielleicht könntet ihr mir noch eine Frage beantworten: was würde es mir im Endeffekt "bringen", mich mit reinem C++ zu beschäftigen? Was kann man damit beispielsweise für coole Sachen machen? Das hab ich noch nicht ganz verstanden.. was bringt mir eine Programmiersprache, wenn ich damit keinerlei grafischer Oberflächen erzeugen kann?

Trenne Programmiersprache von Bibliotheken! Sicherlich ist eine Programmiersprache mehr als Syntax und Compiler. Nun ist die Natur von C++, dass die Programme nativ auf der Zielplattform laufen, die Sprache aber von vielen verschiedenen Plattformen unterstützt wird. Da grafische Oberflächen sich in API, Look&Feel usw. sich zwischen den Plattformen unterscheiden, bringt es nichts, eine einheitliche grafische Bibliothek zu bieten. Java zeigt, wie leicht man damit scheitern kann. So ist es dann doch besser, für die Plattformen angepasste Bibliotheken zu bieten. Microsoft bietet u.a. die MFC, Apple stellt Cocoa bereit undauf mehreren Plattformen läuft Qt. Hinzu kommt, dass C++ älter als die grafischen Oberflächen ist und somit beim Entwurf nie Bestandteil war. Damit hat sich gezeigt, dass der "Behelf" der Zusatzbibliotheken ausreichend war.

Ich bin mir übrigens nicht sicher, ob in der Mechatronik grafische Nutzeroberflächen wichtig sind - zumindest nicht im Sinne eines Fenstersystems. ;)
 
Aber letzten Endes sind es doch alles nur Programmiersprachen. Ich finde es kommt darauf an wieviel Fleiß man hineinsteckt, um eine Sprache zu erlernen. Dann ist es eigentlich irrelevant ob man sich mit einer Web-Programmiersprache oder mit einer höheren Programmiersprache beschäftigt.

Ich finde dass es enorm hilft, sich mit den niederen Sprachen beschäftigt zu haben, auch wenn man sonst nur höhere benutzt. Man versteht einfach besser, was der Rechner macht.

Vielleicht könntet ihr mir noch eine Frage beantworten: was würde es mir im Endeffekt "bringen", mich mit reinem C++ zu beschäftigen? Was kann man damit beispielsweise für coole Sachen machen? Das hab ich noch nicht ganz verstanden.. was bringt mir eine Programmiersprache, wenn ich damit keinerlei grafischer Oberflächen erzeugen kann?

Du kannst doch grafische Oberflächen damit erzeugen. Dass du irgendein Framework brauchst um überhaupt erstmal Grafiken darzustellen, mag vielleicht wie ein Fluch erscheinen, ist in Wirklichkeit aber ein Segen. Stell dir mal vor du müsstest heute noch mit den Möglichkeiten leben, die zu Zeiten von K&R-C vorhanden waren. Das wäre kaum sinnvoll. Stattdessen hat sich in der C-Familie durchgesetzt, dass die Sprache nur eben die Sprache selbst zur Verfügung stellt, und soweit wie möglich auch unabhängig von der ausführenden Plattform ist. Weitere Funktionalität wird über für die jeweilige Umgebung und Aufgabe in Form von Bibliotheken eingebunden.

Bei JavaScript solltest du das Problem eigentlich auch bemerkt haben. Du hast zwar einheitliche Interfaces um Grafik darzustellen (DOM, HTML direkt schreiben, Canvas, etc.) aber in der Praxis gibt es dann je nach Laufzeitumgebung doch wieder deutliche Unterschiede. Da kommen dann Bibliotheken wie jQuery UI ins Spiel, die im Prinzip das Äquivalent der JavaScript-Welt zu Qt sind.

Was macht Qt besonders? Eigentlich nichts. Letzten Endes macht das auch nicht mehr als ein paar Widgets (und einen ganzen Haufen andere Dinge) zur Verfügung zu stellen, die dann hinter den Kulissen mit den auf der Plattform vorhandenen Mitteln umgesetzt sind ohne dass man sich um diese Details kümmern muss. Im Prinzip ist das aber auch mehr oder weniger reines C++, wenn man die ganzen Abstraktionsebenen zurückverfolgt. Klar, irgendwann ruft Qt dann eine API des Betriebssystems auf um ein Fenster zu öffnen oder sowas ähnliches, aber je nach OS geht es da dann auf OS-Ebene auch noch mit C++ weiter, oder C, oder Objective-C. Je nachdem was die Entwickler des OS bevorzugten. Irgendwann mal kommt man vielleicht bei Code an der ursprünglich in Assembler geschrieben war, aber der Grund dafür ist (heutzutage) dann Performance. Rein theoretisch geht das alles auch in C++, je nach Hardware vielleicht auch mit minimalem Inline-Assembler, aber den Großteil könntest du wirklich in C++ nachprogrammieren. Irgendwann redest du dann mit der Grafikkarte über memory mapped IO und kannst tatsächlich Pixel direkt setzen. Der Aufwand lohnt sich nur nicht wirklich, vor allem wenn die Alternative ist dass ein Betriebssystem und ein Framework zusammen 99% der Arbeit machen würden, wenn du sie lässt.

Dementsprechend kannst du auch hergehen und deiner Freundin Windows zeigen und stolz sagen, schau mal, das ist auch in C++ programmiert. Das Problem ist nur dass ihr das nicht wirklich weiterhelfen wird. Meiner Erfahrung nach lernt man am Anfang in solchen halb-fachfremden Studiengängen nur die Basics, also entweder Hello World im Textmodus, oder Hello World mit Fenster zusammengeklickt in Visual Studio. Die Sprache (oder Programmieren im Allgemeinen) kann man danach nicht unbedingt. Vielleicht findest du etwas, womit sie sich ihr Leben leichter machen könnte, das Problem dabei ist nur dass das meistens mit C++ zwar geht, aber der denkbar ärgerlichste Weg zum Ziel ist wenn man auf dem Niveau programmiert auf dem man noch von sowas überzeugt werden muss. Das sind dann oft so Fälle in denen man mit Access, Excel, oder - ja - HTML und JavaScript wesentlich schneller zum Ziel kommen könnte.
 
Hallo Guru's,

Bin gerade auf euer Thema gestoßen und muss sagen das alles sehr interessant klingt. da ich gerade Versuche objektive c etwas zu lernen. Habe gerade ein buch am Start das erklärt wie Apps in Xcode geschrieben werden. Heute Nachmittag müsste das Buch von Galileo Computing kommen das objektiv c und cocoa behandelt.
Meine Frage ist ob es noch empfehlenswertere Bücher gibt oder so Art wochenseminare in der die Basics geklärt werden.

Danke mal für eure Antworten

Gruss
 
Ah okay. Vielen Dank für die Info. Im Nachhinein ist mir selber klar geworden das ich google hätte bemühen sollen. Sorry
 
Habe gerade ein buch am Start das erklärt wie Apps in Xcode geschrieben werden. Heute Nachmittag müsste das Buch von Galileo Computing kommen das objektiv c und cocoa behandelt.
Du hättest Dir vor dem Bestellen die Bewertungen bei Amazon durchgelesen sollen. Schick es wieder zurück. Ich habe das irgendwo noch als Türstopper herumliegen.

Meine Frage ist ob es noch empfehlenswertere Bücher gibt oder so Art wochenseminare in der die Basics geklärt werden.
Ja, es gibt auch empfehlenswertere Bücher. Die Frage ist aber eher wie viel Vorwissen hast Du.

Für den Einstieg ist "Objective-C und Cocoa Band 1: Grundlagen" von Amin Negm-Awad und "Cocoa Programming for Mac OS X" von Aaron Hillegass sicher nicht verkehrt. Und auch immer Empfehlesnert ist "Programming in Objective-C 2.0" von Stephen G. Kochan.

In Kürze kommt noch ein neues von Aaron Hillegass "iOS-Programmierung für iPhone und iPad: Der Big Nerd Ranch-Guide" und eines vom Max Seelemann - "Objective-C für Umsteiger und Fortgeschrittene".

Wenn Du eher Fortgeschrittener bist schau Dir mal "Objective-C 2.0: Programmierung für Mac OS X und iPhone" von Sebastian Meyer sowie "Cocoa Design Patterns für Mac und iPhone" von Erik M. Buck an.
 
Zuletzt bearbeitet:
Danke für die tips. Das Buch ist schon gut. Es liest sich auch gut. Wollte nur weitere lektüren Wissen die gut sind. Ach Amin da war vorher noch ein Link. das Buch habe ich bei Amazon gesehen. Kostet ca. 60€ oder des gleichen.
 
Danke für die tips. Das Buch ist schon gut. Es liest sich auch gut.
Ich bezweifle nicht, dass es sich gut liest. Ich bemängle eher das fachliche.

Wollte nur weitere lektüren Wissen die gut sind. Ach Amin da war vorher noch ein Link. das Buch habe ich bei Amazon gesehen. Kostet ca. 60€ oder des gleichen.
Ich empfehle immer wieder gerne den Besuch einer Bibliothek. Damit ist keine Funktionssammlung gemeint, sondern ein Ort wo Bücher gesammelt, gelagert und auch verliehen werden. Zum Teil sogar gratis. :)
 
Zuletzt bearbeitet:
Also habe soeben mein Buch "Einstieg in Objektive-C 2.0 und Cocoa" von Galileo Design bekommen. Jetzt merke ich den Unterschied zwischen Büchlein und einem Buch :-D
wird schon ganz änderst erklärt und angegangen. Gerade kommt das Welt berühmte "Hallo Welt"

gruß
 
Aber letzten Endes sind es doch alles nur Programmiersprachen. Ich finde es kommt darauf an wieviel Fleiß man hineinsteckt, um eine Sprache zu erlernen. Dann ist es eigentlich irrelevant ob man sich mit einer Web-Programmiersprache oder mit einer höheren Programmiersprache beschäftigt.

Ganz überlesen: PHP ist eine höhere Programmiersprache als C++ ;) Das hat nichts mit der Mächtigkeit sondern mit dem Level der Abstraktion vom System zutun. Höhere Sprachen sind im Allgemeinen auch leichter zu erlernen.

Es ist übrigens nicht nur Fleiß, der einen befähigt, eine Sprache zu erlernen, sondern auch Vermögen. Es wird wahrscheinlich niemanden geben der zB C++ vollends beherrscht. Bei PHP sieht das wahrscheinlich anders aus.

Und noch etwas: Jede Sprache hat ihren Zweck. Sie ist Werkzeug. Da geht es nur bedingt um Spaß (auch wenn manche Obj-C Jünger mir jetzt vehement widersprechen). Der Spaß kommt mit dem Projekt, der Idee, dem Entwurf, Umsetzung und dem Produkt selbst. Die Sprache ist da nur Hilfsmittel.
 
Heißt das nun, dass es mit C++ überhaupt nicht möglich ist solche grafischen Sachen zu erzeugen? Oder wäre es nur verdammt aufwendig?

Möglich wäre/ist es aber es ist verdammt aufwendig wie du schon selbst schreibst. Damit nicht jeder Programmierer das Rad neu erfinden muss gibt es halt die Frameworks. Plattformübergreifend hat sich hier QT sehr weit verbreitet. Cocoa mit Objectiv-C ist für Mac OS X üblich.
 
Zurück
Oben Unten