Kann mir jemand erklären, wie eine GUI funktioniert und wann ich sie verwenden soll? [geschlossen]

16

Ich lerne C ++ seit ungefähr einem Monat und bevor ich weitermache, möchte ich diese mühsame Frage klären, die ich immer wieder habe. Ich weiß, was eine GUI ist, aber ich weiß nicht wirklich, wie sie funktioniert, und vielleicht Beispiele für beliebte?

Obwohl ich weiß, dass die Kommandozeilenprogrammierung das Nötigste ist, denke ich, dass es Spaß machen würde, mit einer GUI herumzuspielen.

Obwohl ich ungefähr 3 Millionen andere Fragen habe, speichere ich sie: D

David
quelle
1
Die letzte Zeile brachte mich zum Lächeln :) +1 dafür
CyprUS

Antworten:

28

Ich verallgemeinere einige GUI-Bibliotheken, aber auf einer sehr hohen Ebene ist das wichtigste Konzept, das Sie verstehen müssen, dass eine GUI ereignisgesteuert ist .

In einer Konsolenanwendung erfolgt Ihre Benutzereingabe normalerweise an bestimmten Punkten, die Sie definiert haben. Sie fordern Ihren Benutzer auf, Sie warten auf seine Eingabe, Sie berechnen etwas basierend auf dieser Eingabe. Einer der Hauptunterschiede ist, dass die Eingabe nur an einer Stelle erfolgt, Sie lesen Text von der Kommandozeile ( stdinin C ++).

In einer GUI-Anwendung haben Sie normalerweise mehrere Orte, an denen Eingaben erfolgen können, z. B. Schaltflächen, die unterschiedliche Aktionen oder Textfelder ausführen. Hier kommen Ereignisse ins Spiel. Wenn Sie beispielsweise auf eine Schaltfläche klicken, wird ein Ereignis ausgelöst. Dieses Ereignis muss von einem Ereignishandler behandelt werden. Dies ist normalerweise nur eine Methode, die ein Ereignisobjekt aufnimmt und aufgerufen wird, wenn ein solches Ereignis ausgelöst wird. Woher weiß Ihre Schaltfläche über den Ereignishandler? Du abonnierst normalerweise (oder hörst es dir an).

Hier ist ein "C ++ inspiriertes" Beispiel, dies ist kein tatsächlicher QT- oder C ++ - Code.

class MyClickHandler : public ClickListener{
   void clickHandler(ClickEvent e){
      showAlertBox("The button "+e.getSource().getName()+" has been clicked"); 
   }
};

Wenn Sie den Button erstellen, registrieren Sie eine Instanz der MyClickHandler-Klasse für den Button.

...
MyClickHandler handler();
Button b("Save");
b.registerListener(handler);
...

Jetzt wird jedes Mal, wenn auf den Button bgeklickt wird, eine Meldung angezeigt, die besagt, dass auf den Button Speichern geklickt wurde.

Sie können sich vorstellen, dass eine GUI-Anwendung zwei Phasen hat:

  • GUI einrichten: Eine kurze Zeit beim Start, in der alle Objekte erstellt und miteinander verbunden werden.
  • Die Ereignisschleife : Ihre GUI befindet sich in einer großen while-Schleife und befindet sich nur im Leerlauf, bis ein Ereignis ausgelöst wird.

Dies ist ein sehr einfaches Beispiel, aber ich würde empfehlen, mit jedem Framework, das Sie auswählen, ein Meldungsfeld anzuzeigen, wenn Sie auf eine Schaltfläche klicken.

Für das Framework gibt es viele: Im Falle von C ++ würde ich Qt wahrscheinlich empfehlen.

Ein letzter Ratschlag: Halten Sie sich von GUI-Designern fern, bis Sie wirklich wissen, was im Hintergrund passiert. Es ist nicht so schwer, einige einfache Beispiele zu schreiben und die Ereignisschleife zuerst zu verstehen und dann zu komplexeren Layouts überzugehen.

sebastiangeiger
quelle
Wenn Sie am Ende der Klassendefinition ein Semikolon einfügen und die Vererbung öffentlich machen, ist die C ++ - Syntax korrekt bzw. möglich.
Lstor
1
Erledigt. Ich wollte aber keine falschen Erwartungen wecken, da der Code doch nicht lauffähig ist. Die meiste Erfahrung habe ich mit Swing gemacht, was sich wahrscheinlich in den Klassennamen widerspiegelt. Dieselben Konzepte werden in verschiedenen Frameworks unterschiedlich bezeichnet.
Sebastiangeiger
1
+1 Dies scheint die einzige Antwort zu sein, die die Frage beantwortet (für mich scheint er nicht nur nach Frameworks zu fragen, er fragt nach allgemeinen Konzepten)
Federico Klez Culloca
1
Ewwww .... hässlicher Zuhörer Mist.
DeadMG
7

Jetzt ist die beste Zeit, um GUI-Programmieren zu lernen. Wie Sie wissen, C ++, würde ich empfehlen, sich mit QT. Eine großartige Dokumentation, eine riesige Anwenderbasis und viele Beispiele / Tutorials, aus denen man lernen kann.

mattnz
quelle
1
+1 für Qt - @David - Qt hat eine eigene Entwicklungsumgebung namens Qt Creator, die eigenständig, kostenlos und im Vergleich zu anderen relativ einfach ist. Qt ist leistungsstark, intuitiv, umfangreich, sehr gut dokumentiert und verfügt über eine große und aktive Anwenderbasis. Der Einstieg ist einfach und es gibt viele Beispiele, mit denen Sie anfangen können, zu spielen und Ihr eigenes Ding zu machen - das ist übrigens eine großartige Möglichkeit, um zu lernen. Es kann hier heruntergeladen werden
Roger Attrill
Ich neige dazu, dies abzulehnen. QT fördert viele wirklich schlechte Praktiken in C ++, wenn Sie nicht wissen, worauf Sie achten müssen. - Was Sie nicht tun, nach nur einem Monat C ++. Darüber hinaus werden einige komplexe Aspekte in C ++ angesprochen. Wenn möglich, würde ich zuerst mit der GUI-Programmierung in einer anderen Sprache beginnen und mich darauf konzentrieren, C ++ richtig zu machen.
Konrad Rudolph
3

Sie können auch mit Microsoft Visual Studio C ++ Express beginnen . Die IDE ist sehr benutzerfreundlich und benutzerfreundlich (und kostenlos!), Und Sie können sehr schnell Ihre ersten GUI-Anwendungen erstellen. So können Sie sich darauf konzentrieren, die Grundlagen der ereignisgesteuerten Programmierung zu verstehen - ein anderer Ansatz das musst du meistern.

Sie können auch direkt mit dem Erstellen von WPF-gesteuerten Anwendungen beginnen, aber ich würde zunächst mit Windows Forms beginnen. Dies ist eine Technologie, die weniger zu verstehen ist, da es sich nur um C ++ mit der Windows Forms-API von Microsoft handelt.

Jalayn
quelle
1
In VC ++ Express können Sie GUI schreiben mit: 1. Win32 API, das sehr alt, umständlich und einfach lächerlich ist 2. MFC, das ist ein alter Haufen Mist 3. WTL, das besser ist, aber nicht plattformübergreifend. 4. C ++ / CLI ist unbeliebt, schlecht unterstützt (auch ohne Intellisense) und zu kompliziert. Qt ist einfacher, plattformübergreifend, hat einen netten GUI-Designer und eine große Anzahl nützlicher Nicht-GUI-Klassen, was in C ++ mit seiner kleinen Standardbibliothek sehr wichtig ist.
Anton Barkovsky
0

Vielleicht besser geeignet für StackOverflow, getaggt mit c ++; aber wie auch immer.

Schauen Sie sich ein paar davon bei Google an. Qt, WxWidgets, WinApi von TheForgers, Fltk ...

GUIs sind nicht so schwer zu bedienen, besonders wenn Sie bereits mit C ++ vertraut sind. Gehen Sie mit WxWidgets, wie ich finde; Qt ist etwas zu komplex für ein monatelanges Lernen. Sie können Wx in ein paar Stunden abholen.

Seb Holzapfel
quelle
-1

Benutzer mögen keine komplizierten Dinge. Konsole ist eine komplizierte Sache, deshalb müssen Sie GUI-Anwendungen erstellen, die benutzerfreundlicher und einfacher zu verstehen sind. Dies ist der offensichtlichste Grund, den ich sehe. Sie können sich gtk oder Qt ansehen - diese beiden sind die beliebtesten.

Sergey
quelle
2
CLI ist nicht kompliziert und GUIs sind per Definition für den Benutzer komplizierter. Sie sind nicht weniger kompliziert zugänglicher.
Ominus