wake-up-neo.com

Wie erstelle ich eine grafische Benutzeroberfläche in C ++?

Alle meine C++ - Programme haben bisher die Befehlszeilenschnittstelle verwendet, und die einzige andere Sprache, mit der ich Erfahrung habe, ist PHP, die keine GUIs unterstützt.

Wo fange ich mit der Programmierung der grafischen Benutzeroberfläche in C++ an? Wie erstelle ich eine?

238
waiwai933

Im Wesentlichen macht das Fenstersystem eines Betriebssystems einige API-Aufrufe verfügbar, die Sie ausführen können, um Aufgaben wie das Erstellen eines Fensters oder das Platzieren einer Schaltfläche im Fenster auszuführen. Grundsätzlich erhalten Sie eine Reihe von Header-Dateien und können Funktionen in diesen importierten Bibliotheken aufrufen, genau wie Sie es mit stdlib und printf tun würden.

Jedes Betriebssystem verfügt über ein eigenes GUI-Toolkit, eine Reihe von Header-Dateien, API-Aufrufe und eine eigene Vorgehensweise. Es gibt auch plattformübergreifende Toolkits wie gtk-, qt- und wx-Widgets, mit denen Sie Programme erstellen können, die überall funktionieren. Sie erreichen dies, indem sie auf jeder Plattform dieselben API-Aufrufe haben, jedoch eine andere Implementierung für die API-Funktionen, die die nativen OS-API-Aufrufe aufrufen.

Eine Sache, die sie alle gemeinsam haben, die sich von einem CLI-Programm unterscheidet, ist eine sogenannte Ereignisschleife. Die Grundidee dort ist etwas kompliziert und schwer zu komprimieren, aber im Wesentlichen bedeutet dies, dass in Ihrer Hauptklasse/Hauptfunktion nicht viel passiert, außer:

  • überprüfen Sie die Ereigniswarteschlange, wenn neue Ereignisse vorliegen
  • wenn dies der Fall ist, senden Sie diese Ereignisse an die entsprechenden Handler
  • wenn Sie fertig sind, kehren Sie zur Ertragskontrolle zum Betriebssystem zurück (normalerweise mit einem speziellen Funktionsaufruf "sleep" oder "select" oder "yield").
  • dann kehrt die Yield-Funktion zurück, wenn das Betriebssystem fertig ist und Sie die Schleife erneut durchlaufen haben.

Es gibt viele Ressourcen zur ereignisbasierten Programmierung. Wenn Sie Erfahrung mit Javascript haben, ist es die gleiche Grundidee, außer dass Sie, der Scripter, keinen Zugriff oder keine Kontrolle über die Ereignisschleife selbst haben oder welche Ereignisse es gibt. Ihre einzige Aufgabe ist das Schreiben und Registrieren von Handlern.

Beachten Sie, dass die GUI-Programmierung im Allgemeinen unglaublich kompliziert und schwierig ist. Wenn Sie die Option haben, ist es tatsächlich viel einfacher, einen eingebetteten Webserver in Ihr Programm zu integrieren und über eine HTML/Web-basierte Oberfläche zu verfügen. Die einzige Ausnahme, auf die ich gestoßen bin, sind Apples Cocoa + Xcode + Interface Builder + Tutorials, die es einfach zu der zugänglichsten Umgebung für Leute machen, die mit GUI-Programmierung noch nicht vertraut sind.

140
Breton

Es gibt genügend von kostenlose portable GUI-Bibliothekenmit jeweils eigenen Stärken und Schwächen:

Besonders Qt hat nette Tutorials und Tools, die Ihnen den Einstieg erleichtern. Genießen!

Beachten Sie jedoch, dass Sie sollten vermeiden Sie plattformspezifische Funktionen wie die Win32-API oder MFC. Das bindet Sie unnötig an eine bestimmte Plattform, ohne dass Ihnen dies Vorteile bringt.

154
vog

Betriebssystemunabhängiger Algorithmus " Erstellen von GUI-Anwendungen in C++ in drei Schritten ":

  1. Installieren Sie Qt Creator

    enter image description here

  2. Neues Projekt erstellen (Qt Widgets-Anwendung)

    enter image description here

  3. Baue es.

Herzlichen Glückwunsch, Sie haben Ihre erste GUI in C++.

Jetzt können Sie eine Menge von Dokumentation lesen, um etwas zu erstellen, das komplizierter ist als die GUI-Anwendung "Hello world".

70

In Anbetracht des Kommentars "Sagen Sie als Beispiel Windows XP" haben Sie folgende Optionen:

  • Interagiere direkt mit dem Betriebssystem über dessen API, was für Microsoft Windows überraschend überraschend ist Windows API . Die endgültige Referenz für die WinAPI ist Microsoft MSDN-Website . Ein beliebtes Online-Tutorial für Anfänger ist theForger's Win32 API Programming Tutorial . Der Klassiker dafür ist Charles Petzolds Programming Windows, 5th Edition .

  • Verwenden Sie eine plattformspezifische Bibliothek (sowohl im Hinblick auf das Betriebssystem als auch auf den Compiler) wie MFC , die die WinAPI in eine C++ - Klasse umschließt. Die Referenz dafür ist wieder MSDN. Ein klassisches Buch dafür ist Jeff Prosises Programming Windows with MFC, 2nd Edition . Wenn Sie beispielsweise CodeGear C++ Builder verwenden, lautet die Option hier VCL .

  • Verwenden Sie eine plattformübergreifende Bibliothek wie GTK + (C++ - Wrapper: gtkmm ), Qt , wxWidgets oder - FLTK umschließt die API des jeweiligen Betriebssystems. Die Vorteile dabei sind, dass Ihr Programm im Allgemeinen für verschiedene Betriebssysteme kompiliert werden konnte, ohne dass die Quellcodes geändert werden mussten. Wie bereits erwähnt, haben sie jeweils ihre eigenen Stärken und Schwächen. Eine Überlegung bei der Auswahl, welche verwendet werden soll, ist die Lizenz. In den angegebenen Beispielen steht GTK + & gtkmm unter LGPL-Lizenz, Qt unter verschiedenen Lizenzen, einschließlich proprietärer Option, wxWidgets unter einer eigenen wxWindows-Lizenz (mit einer Umbenennung in wxWidgets-Lizenz) und FLTK unter LGPL mit Ausnahme. Weitere Informationen zu Verweisen, Lernprogrammen und Büchern finden Sie auf der jeweiligen Website.

23
KTC

Da ich bereits dort war, wo Sie gerade sind, kann ich Ihnen "antworten".

Tatsache ist, dass es keine einfache Möglichkeit gibt, eine GUI zu erstellen. GUIs hängen stark von plattform- und betriebssystemspezifischem Code ab. Aus diesem Grund sollten Sie die Dokumentation zu Ihrer Zielplattform/Ihrem Betriebssystem für Fensterverwaltungs-APIs lesen. Das Gute daran ist, dass es viele Bibliotheken gibt, die diese Einschränkungen und abstrakten Architekturunterschiede in einer einzigen plattformübergreifenden API behandeln. Die zuvor vorgeschlagenen, GTK und QT, sind einige dieser Bibliotheken.

Aber auch diese sind etwas ZU kompliziert, da viele neue Konzepte, Datentypen, Namespaces und Klassen gleichzeitig eingeführt werden. Aus diesem Grund werden sie mit einem GUI-WYSIWYG-Editor gebündelt geliefert. Sie ermöglichen so ziemlich die Programmierung von Software mit GUIs.

Zusammenfassend gibt es auch nicht freie "Umgebungen" für die GUI-Entwicklung wie Visual Studio von Microsoft. Für Benutzer mit Delphi-Erfahrung ist Visual Studio möglicherweise vertrauter. Es gibt auch kostenlose Alternativen zu der von Microsoft bereitgestellten Visual Studio-Umgebung: Visual Studio Express , was mehr als genug ist, um mit der GUI-Entwicklung zu beginnen.

18
Spidey

Ich habe eine Website mit einem "einfachen" Tutorial gefunden: http://www.winprog.org/tutorial/start.html

14
ZippyV

Qt ist das Beste.

6
ufukgun

Es ist einfach, eine .NET Windows-GUI in C++ zu erstellen.

Siehe das folgende Tutorial von MSDN . Sie können alles herunterladen, was Sie brauchen (Visual C++ Express) für kostenlos .

Natürlich binden Sie sich an .NET, aber wenn Sie nur herumspielen oder nur eine Windows-App benötigen, werden Sie in Ordnung sein (die meisten Leute haben noch Windows ... für den Moment).

3
Justicle

Ich benutze FLTK, weil QT nicht kostenlos sind. Ich entscheide mich nicht für wxWidgets, weil mein erster Test mit einem einfachen Hallo-Welt-Programm eine ausführbare Datei von 24 MB, fltk 0,8 MB, erzeugt ...

3
pernecker