GUI Programmierung unter Linux

Grüß Gott!

Also ich hätte da mal ne Frage: Ich code schon seit relativ langer Zeit unter Linux in C/C++ aber immer nur rein textbasiert. Ich würde aber mal ganz gerne anfangen mit der GUI Programmierung unter Linux. Aber ich kann man nicht entscheiden in welcher Richtung ich mich nun weiterbilden soll. QT, KDE, GTK+, bla,blabla...

Wozu ratet ihr mir? Ich habe kaum erfahrung in GUI Programmierung aber es wäre ganz schön wenn das ganze evtl. plattformunabhängig verfügbar wäre.


Vielen Dank

Nimda05
 
Also Qt und Gtk+ sind zwar auch plattformunabhängig, aber ich würde dir wxWidgets empfehlen. Diese GUI Bibliothek hat den Vorteil, dass es im Gegensatz zu anderen Toolkits nur eine Zwischenschicht zum nativen Toolkit des jeweilgen Betriebsystem darstellt. D.h. das die Programme unter jedem OS das native Look and Feel haben, da z.B. unter Linux im Endeffekt Gtk+ und unter Windows die WinAPI zur Darstellung der GUI verwendet wird.

Hier findest du auch einen Vergleich von wxWidgets und anderen Toolkits:
http://www.wxwidgets.org/wiki/index.php/WxWidgets_Compared_To_Other_Toolkits
 
Ich hab mit KDevelop und QT recht gute Erfahrungen gemacht. Kdevelop hat zwar noch einige Bugs aber durch die Benutzung von Signals und Slots ist QT Programmierung sehr leicht erlernbar und sehr angenehm. Hab insgesammt recht wenig Erfahrung mit GUI Programmierung aber im Vergleich zu Visual C++ ist KDevelop in meinen Augen ein Segen.
 
Wenn du C++ programmierst, solltest du dir evtl mal WxWidgets ansehen. Damit programmierst du anabhängig vom am Ende verwendeten Toolkit.
 
technisch gesehen ist qt das beste was es zur zeit gibt, imho. mir kommt qt auch etwas vollstaendiger vor als wx. das wird schon deutlich wenn man die dokumentation vergleicht. und dokumentation braucht man bei solchen megaframeworks mit sicherheit oft.
als beispiel dafuer was man so cooles mit qt machen kann: http://zrusin.blogspot.com/2007/07/scripter.html

dass wx das "native toolkit" verwendet ist unter windows und mac os x zwar nett, aber unter linux gibts eben keins. gtk zu wrappen stinkt imho. dadurch hat man zwei schichten von komplexem zeug wo es potentiell bugs geben kann und besonders effizient erscheint mir der ansatz auch nicht...

ich befolge meistens die regel, dass ich nur programmiersprachen, bibliotheken und andere entwicklungswerkzeuge verwende die ich auch selbst ohne grossen aufwand aus dem source code uebersetzen und installieren kann. wenn man auf die pakete seiner distribution angewiesen ist und da ist nun mal irgendwo ein bug der in einer neueren version gefixt ist, oder man will irgend ein cooles feature in einer preview version ausprobieren (da gibts bei qt sehr oft interessantes zeug) dann ist man aufgeschmissen. versuch mal den ganzen gtk wust selbst zu bauen. ist zwar nicht wirklich schwer, aber doch ziemlich laestig, weil so viele komponenten. qt zu bauen ist auf allen plattformen die ich probiert hab (win xp, mac os x, linux) absolut trivial und schmerzfrei. und es funktioniert immer. letztens wollte ich wx 2.8 auf mac os x bauen um codeblocks mal wieder auszuprobieren und der build vorgang ist abgesemmelt. bisschen graben brachte das problem zum vorschein. hab im irc kanal gefragt und da sagte jemand sinngemaess "ich dachte das problem waere schon vor jahren gefixt worden". gab dann einen workaround; entweder ohne unicode oder ohne odbc uebersetzen (iirc). imho keine akzeptable loesung.

ich denke mal es liegt daran, dass bei trolltech lauter sehr faehige leute dafuer bezahlt werden qt zu bauen. sicher sind auch die wx leute sehr faehig, aber es gibt eben stellen die niemand von diesen leuten braucht oder wo keine zeit fuer ist sie zu fixen und dann bleibt das liegen. ausserdem ist wx etwas altmodisch und emuliert ein wenig die eklige mfc bibliothek. viele makros und sowas, das event handling finde ich auch bei weitem nicht so elegant wie den signals/slots mechanismus (fuer den qt mal eben die sprache erweitert hat, kann man auch bloed finden, aber c++ stinkt nun mal. ;).

letztendlich bleibt noch die lizenzfrage. mit wx brauchst du nicht drueber nachdenken. falls du dich entschliesst die naechste killer app zu schreiben, nicht unter gpl zu stellen und zu verkaufen kostet dich das bei qt einen arm und ein bein.
fuer bestimmte anwendungen kann wx natuerlich auch deutliche vorteile haben. es gibt z.b. klassen fuer die verwendung von activex controls die in der gpl version von qt nicht enthalten sind (in der kommerziellen afaik schon).
 
Also nochmal bitte: Wenn ich ein Programm in QT schreibe dann darf ich dieses nicht einfach so verkaufen?

Gibt es empfehlenswerte (deutsche) Lektüre oder Webseiten zu der Programmierung mit QT in C/C++?
 
du kannst fuer 2000 euro pro entwickler oder sowas in der art eine lizenz von trolltech kriegen die dir erlaubt mit deiner software zu machen was du willst. fuer umsonst kriegst du von trolltech qt nur gpl lizensiert. wenn du die gpl lizensierte variante verwendest faellt dein code dadurch auch automatisch unter die gpl.
es gibt jede menge dokumentation und lektuere, vllt sogar in deutsch. aber wenn du so eine absurd komplexe programmiersprache wie c++ beherrschst, sollte google bedienen und englische texte lesen ja kein problem fuer dich sein. ;)
 
Probier das ganze einfach mal aus.
Mit KDevelop eine "Designer basierte C++ Anwendung erstellen". Du bekommst eine Beispiel Anwendung. Wenn du dir den Code dafür anschaust, wird dir das Prinzip klar. Mit dem Designer pflanzt du dann weitere Elemente wie Buttons, Regler oder Statusanzeigen in die Anwendung. Auf http://doc.trolltech.com bzw. genauer gesagt hier http://doc.trolltech.com/4.0/mainclasses.html findest du ne schöne Doku der einzelnen Elemente.
Achte darauf, dass du quasi für jedes Element ne eigene Bib einbinden musst (steht auf der Seite des Elements in der Doku ganz oben. Ich habs übersehen und den Schei* verflucht ;-).
In de Doku steht dann sowas wie z.B.
QString text () const
bei QLineEdit. Ein LineEdit hat also die Eigenschat text, deren Wert als QString vorliegt. Der Code könnte also lauten (das QLineEdit ist als "Eingabe" bekannt):
QString var;
var = Eingabe.text();
Nun hast du den Wert, des von "Eingabe" in einer Variable. Wenn du nun auch ein QLabel (als "Ausgabe" bekannt) angelegt hast, kannst du den Text dort mit
Ausgabe.setText(var)
ausgeben. Ist also ganz leicht =)
 
Zurück
Oben