[HOWTO] Welches Toolkit für GUIS?



  • Welches GUI-Toolkit soll ich verwenden?

    Diese Frage taucht hier im Forum immer wieder auf - ich möchte versuchen hier 2 der wichtigsten Toolkits zu erklären.
    Ich versuche das ganze so weit wie möglich neutral und ohne direkte Wertung der Toolkits durchzuführen.
    Wer andere Toolkits vorstellen möchte, der soll sich bitte keinen Zwang antun, aber diese beiden kenne ich gut genug um etwas dazu zu schreiben :D. Wir können das dann ja später in einem weiteren Thread und in einem großen Post bündeln, damit dieses Thema endlich mal eine Referenz bekommt, hehe^^.

    1.) QT - http://trolltech.com

    Dieses Toolkit ist ein kommerzielles OpenSource-Toolkit der Firma Trolltech. Auf diesem Toolkit basiert der Linux-Desktop KDE.
    Ab Version 4.5 ist QT unter LGPL veröffentlicht, welches auch die kommerzielle Nutzung erlaubt, solange dynamisch gelinkt wird.
    Das Toolkit kommt mit einem Designer, einem Übersetzungesprogramm, welches ähnlich wie GNUs gettext arbeitet. Zusätzlich hat es den QT-Assistant, welches es dem Entwickler erlaubt, die Dokumentation in einem eigenen Format abzulegen, welches Platformübergreifend nutzbar ist. Ähnelt ein wenig den *.chm-Hilfedateien von Microsoft.
    Da QT eine Art Präprozessor (qmake) verwendet, ist es leider nötig, dass eine Projektdatei händisch erstellt wird, das die Erstellung des Makefiles für den jeweiligen Compiler regelt. Das macht es für Einsteiger in C++ und vor allem für Leute, die den Umgang mit Makefiles bzw Programmen wie Bakefile oder CMake nicht gewohnt sind, nicht einfach.
    Abhilfe schafft hier ein kostenloses Integrationskit für Eclipse und ein zukaufbares Integrationskit für Visual Studio bzw Visual C++ ab Standard. Oder man verwendet Code::Blocks, welches die Integration von QT von Haus aus mitbringt. Es gibt auch eine IDE für QT, welche sich QDevelop nennt. Dieses ist allerdings NICHT aus dem Hause Trolltech, sondern ein seperates Projekt.
    Seit Version 4.5 kommt QT mit QtCreator, eine sehr gute und intuitive IDE mit integriertem Editor. Liefert auch als Compiler MinGW mit, der benötigt wird. QtCreator führt alle nötigen Schritte selbst aus und es macht richtig Spaß damit zu arbeiten, da auch das Intellisense gut funktioniert.
    Dessen nicht genug, kann QT sogar mit Hilfe von DirectX und OpenGL direktes Rendering anbieten und ist daher als Toolkit für Game-Applikationen wie Level-Designer etc geeignet (kann das jemand bestätigen?)
    Kleine Anmerkung: Das Toolkit schimpft sich selbst "High-Performance-Toolkit".

    Hier nochmal alle Punkte auf einen Blick:

    * Sehr komplettes Toolkit
    * Viele Beispiele die den Einstieg erleichtern
    * Beispielhafte Dokumentation
    * Eigene Projektdateien und Vorbearbeitung durch eigenes (mitgeliefertes) Programm nötig
    * Platformübergreifend: Linux, Mac, WindowsXP.
    * Unterstützt direktes DirectX (windows only) und OpenGL-Rendering.
    * Nativ aussehende Widgets.
    * Style-Support

    2.) wxWidgets - http://wxwidgets.org

    wxWidgets ist ein OpenSource Projekt mit einem kleinen Stamm von Hauptentwicklern (Projekt-Starter ist Julian Smart von der Universität Edingburgh) und einer wirklich großen Community, die mit ihren Beiträgen dem ganzen zu einer Allround-Lösung verhelfen.
    Eine Stärke des Toolkits ist es, dass man es für alle Arten der Entwicklung kostenlos und ohne Lizenz-Gebühren verwenden kann.
    wxWidgets bietet für Lokalisierungen ebenfalls eine Lösung, indem es einfach gettext-Dateien liest. Das heisst für den Anwender, dass die .mo-Dateien mit jedem beliebigen Programm erstellt werden können (als Bsp. PoEdit oder direkt gettext).
    Einen Designer ähnlich wie bei QT kann man als externe Projekte beziehen, hier gibts etliche Anbieter. So bietet wxFormBuilder ein Programm, das vom Aufbau an den QT-Designer erinnert, die wxWidgets-Developer bieten ein eigenes Programm zum Kauf an und Code::Blocks kommt mit einem integrierten Designer. Welchen man letztendlich verwendet ist egal. Im Unterschied zu QT kommt wxWidgets ohne einen Präprozessor aus, es ist keine direkte Integration in die IDE nötig um ein wxWidgets-Programm zu kompilieren. Die Dateien die der Formdesigner ausspuckt kann man entweder als C++-Code einbinden oder als sogenannte wxrc-Datei zur Laufzeit laden. Das macht dieses Toolkit sehr flexibel, da nicht jede Änderung an einem Dialog neu einkompiliert werden muss, sondern dynamisch über diese Datei ladbar ist.
    Auch ein eigenes Hilfeformat ist mit dabei, das allerdings ohne Viewer oder ähnliches auskommt: Es werden einfach .zip-Dateien mit einer bestimmten Struktur erstellt. Diese können dann von der entsprechenden Klasse geladen werden und mit dem Programm angezeigt werden.
    Ein weiterer Punkt ist, dass wxWidgets immer zuerst versucht, native Widgets zu
    verwenden, bevor eigene Widgets zum Einsatz kommen.
    Ein häufiger Kritikpunkt an wxWidgets ist seine sehr starke Verwendung von Makros und seine "MFCness". Hier liegt das "Problem" im Ursprung: wxWidgets wurde in den 90ern begonnen und MFC war damals auf der Höhe der Popularität und viele wünschten sich diese Form. Ein weiterer Kritikpunkt ist, dass C++-Mechanismen nicht effizient genutzt werden, da gehen die Meinungen aber auch weit auseinander. Das Bild muss sich am ende jeder selbst machen.
    Hier nochmal alle Punkte auf einen Blick:

    * Große Community mit vielen Beiträgen
    * Viele externe Programme und Designer
    * Externe IDE (Code::Blocks) mit internem Designer
    * Kostenlos Nutzbar, auch für kommerzielle Projekte
    * Beispielhafte Dokumentation
    * Viele Beispiele die den Einstieg erleichtern
    * Native Widgets.
    * Platformübergreifend: Linux, Windows, Mac, Sun OS

    3.) GTK - http://www.gtk.org/

    GTK kommt von Linux und wurde für den Gnome Desktop entwickelt, steht aber auch unter Windows und Mac zur Verfügung. GTK an sich besteht aus mehreren libs:
    * GLib - der Kern, der die Widgets und Fenster zur Verfügung stellt
    * Pango - Eine Bibliothek zum rendern von Text unter Beachtung von i18n.
    * Cairo - eine Bibliothek zum rendern von 2D-Bildern.
    * ATK - Eine Bibliothek für die sog. Accessibility.

    GTK an sich besteht aus einem C-Interface, bietet aber mit GTKmm (http://gtkmm.org) auch ein C++-Interface an. Damit ist GTK sehr vielseitig. Ausserdem zeichnet GTK seine Fenster und Widgets selbst, was ein Vor- (portabilität) aber auch ein Nachteil sein kann. Wenn Programme sich auf einer Platform "fremd" anfühlt bzw nicht den selben L&F hat wie der Rest, dann tendieren User dazu sich Alternativen zu suchen. GTK ist genauso wie die anderen unter LGPL verfügbar, also in kommerziellen Projekten nutzbar. Mit Anjuta liefert GTK sowohl unter Gnome als auch auf anderen Platformen eine sehr brauchbare IDE mit integriertem Designer. Das macht GTK durchaus interessant.

    Hier nochmal alle Punkte auf einen Blick:

    * Große Community mit vielen Beiträgen
    * Viele externe Programme und Designer
    * Kostenlos Nutzbar, auch für kommerzielle Projekte
    * Gute Dokumentation
    * Viele Beispiele die den Einstieg erleichtern
    * Keine native Widgets.
    * Platformübergreifend: Linux, Windows, Mac



  • die alten Threads dazu:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-81596.html

    Recht viel hat sich da ja in den letzten 4 Jahren nicht getan, IMO. Aber es zu aktualisieren wo sich was getan hat ist sicher nicht schlecht 🙂

    --

    Woher du die Infos zu wxWidgets 3.0 nimmst, ist mir allerdings schleicherhaft. http://wiki.wxwidgets.org/Development:_wxWidgets_3 hat sich seit Jahren kaum mehr geaendert, und noch vor einem Jahr hiess es:

    http://wxwidgets.blogspot.com/2007/11/looking-forward-to-wxwidgets-3.html schrieb:

    -3.html"]

    First, a word of reassurance: there are no sweeping backwards-incompatible changes in wxWidgets 3.0 compared to 2.8. We did have to break compatibility in a few places but fixing the existing code to compile with 3.0 will be trivial, if needed at all, unlike 1.0 -> 2.0 transition which required rewriting it.

    Was - zumindest fuer mich - bedeutet dass die alte API erhalten bleibt => kein boost, keine STL, immer noch MFC-Style. Was sind deine Quellen?



  • Im wxWidgets Wiki steht so einiges.

    Gruß
    Don06


  • Mod

    Hm, hatte das schon länger vor. Daher pinne ich den Thread mal.

    phlox



  • Der Freshmeat Artikel GUI Toolkits for The X Window System behandelt noch weitere Toolkits. Ist aber auf Englisch.



  • Don06 schrieb:

    Im wxWidgets Wiki steht so einiges.

    Gruß
    Don06

    *g* danke dass du meinen Beitrag so aufmerksam gelesen hast:

    Blue-Tiger schrieb:

    .... http://wiki.wxwidgets.org/Development:_wxWidgets_3 hat sich seit Jahren kaum mehr geaendert, ...

    🙄 😉

    Der zitierte Wiki-Eintrag ist wie gesagt nur eine Ideensammlung, deren Kern schon seit Jahren der Selbe ist. Was davon uebernommen wird, steht in den Sternen, wobei der von mir zitierte Blog-Eintrag vermuten laesst, dass all die hochgestochenen Ideen (Integration von Boost, STL, Modernisierung der API) fallen gelassen wurde. Abgesehen von einem einzigen Beitrag in den wxWidgets-Blog im August diesen Jahres bzgl. Unicode in wxWidgets3 hab ich noch absolut gar nix Konkretes darueber gehoert, was jetzt wirklich passiert. Aber ich befuerchte viel mehr als ein "wxWidgts2.8 mit UTF-8" wirds nicht 😞



  • Hab GTK hinzugefügt und QT geupdated.
    rya.



  • Der Text zu Qt ist leider nicht mehr ganz aktuell:

    Dieses Toolkit ist ein kommerzielles (ist mittlerweile komplett LGPL-lizensiert) OpenSource-Toolkit der Firma Trolltech Nokia. Auf diesem Toolkit basiert der Linux-Desktop KDE.
    Ab Version 4.5 ist QT unter LGPL veröffentlicht, welches auch die kommerzielle Nutzung erlaubt, solange dynamisch gelinkt wird. (ah okay, denke, das erste "kommerziell" könnte aber zu abschreckend wirken [so wie bei mir :)])
    Das Toolkit kommt mit einem Designer, einem Übersetzungesprogramm, welches ähnlich wie GNUs gettext arbeitet. Zusätzlich hat es den QT-Assistant, welches es dem Entwickler erlaubt, die Dokumentation in einem eigenen Format abzulegen, welches Platformübergreifend nutzbar ist. Ähnelt ein wenig den *.chm-Hilfedateien von Microsoft.

    {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{
    Da Qt eine Art Präprozessor (qmake moc (qmake ist nur eine Art Metamakefile, ähnlich CMake)) verwendet, ist es leider nötig, dass eine Projektdatei händisch erstellt wird, das die Erstellung des Makefiles für den jeweiligen Compiler regelt. Das macht es für Einsteiger in C++ und vor allem für Leute, die den Umgang mit Makefiles bzw Programmen wie Bakefile oder CMake nicht gewohnt sind, nicht einfach.
    Abhilfe schafft hier ein kostenloses Integrationskit für Eclipse und ein zukaufbares Integrationskit für Visual Studio bzw Visual C++ ab Standard. Oder man verwendet Code::Blocks, welches die Integration von QT von Haus aus mitbringt. Es gibt auch eine IDE für QT, welche sich QDevelop nennt. Dieses ist allerdings NICHT aus dem Hause Trolltech, sondern ein seperates Projekt.
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} (generell obsolet seit QtCreator, händisches Editieren nur selten nötig)

    Seit Version 4.5 kommt QT mit QtCreator, eine sehr gute und intuitive IDE mit integriertem Editor. Liefert auch als Compiler optional MinGW mit, der benötigt wird, bietet Unterstützung für Microsoft's Compiler, kann aber generell für jeden Compiler angepasst werden. QtCreator führt alle nötigen Schritte selbst aus und es macht richtig Spaß damit zu arbeiten, da auch das Intellisense und Debugging gut funktioniert.
    Dessen nicht genug, kann QT sogar mit Hilfe von OpenGL direktes Rendering anbieten und ist daher als Toolkit für Game-Applikationen wie Level-Designer etc geeignet (kann das jemand bestätigen? <- DirectX wird nicht direkt unterstützt)
    Kleine Anmerkung: Das Toolkit schimpft sich selbst "High-Performance-Toolkit". (Quelle?)

    Hier nochmal alle Punkte auf einen Blick:

    * Sehr komplettes Toolkit
    * Viele Beispiele die den Einstieg erleichtern
    * Beispielhafte Dokumentation
    * Eigene Projektdateien und Vorbearbeitung durch eigenes (mitgeliefertes) Programm nötig
    * Platformübergreifend: Linux, Mac, WindowsXP.
    * Unterstützt direktes DirectX (windows only) und OpenGL-Rendering.
    * Nativ aussehendeNative Widgets sowie eine Handvoll Styles, welche die Widgets anderer Betriebsysteme und Fenstermanager imitieren.
    * Style-Support
    * Stylesheet-Support (Stylesheets und Styles gibt es beides in der Qt-Welt, sind aber unterschiedliche Unterframeworks)



  • Hallo Leute,

    ich bin neu hier im Forum.
    Habe bisher immer Win32-Anwendungen mit Delphi entwickelt, möchte aber zukünftig weitestgehend plattformunabhängig in C++ programmieren.
    Welche Libs sollte ich mir eurer Meinung nach reinziehen? Es gibt ja regelrechte Forenkriege zwischen Qt und wxWidgets Verfechtern. Vielleicht gibt es ja auch noch andere Empfehlungen von euch...

    Etwas eingerostete Grundkenntnisse in C++ habe ich noch, denke ich. Habe früher Konsolenprogramme und MFC programmiert.

    Für mich ist wichtig zukunftsorientiert und plattformunabhängig zu programmieren, deshalb will ich weg von Delphi.
    Der Einstieg sollte nicht zu schwer sein. Kostenlos wäre natürlich am besten. IDE Kenntnisse habe ich in Code::Blocks und Visual Studio Express Edition.
    Wichtig wäre auch, ob die Lib auch in der Arbeitspraxis eingesetzt wird, man will ja auch an die eigene Job-Sicherheit denken.

    Vielleicht hat der eine oder andere einen guten Tipp oder persönliche Erfahrungen für mich...

    MfG watchdogg



  • wxWidgets wird genauso in der Praxis eingesetzt wie QT.
    Unreal Engine nutzt als Beispiel wxWidgets für das Fenster bzw den Editor.
    Beides ist zukunftssicher.
    Beide haben Vor- und Nachteile.
    Wenn du auf Nummer sicher gehen willst, lern beide :P.



  • [quote="watchdogg"]Hallo Leute,

    ich bin neu hier im Forum.
    Habe bisher immer Win32-Anwendungen mit Delphi entwickelt, möchte aber zukünftig weitestgehend plattformunabhängig in C++ programmieren.
    Welche Libs sollte ich mir eurer Meinung nach reinziehen? Es gibt ja regelrechte Forenkriege zwischen Qt und wxWidgets Verfechtern. Vielleicht gibt es ja auch noch andere Empfehlungen von euch...

    MfG watchdogg[/quote]

    Der Krieg wird nicht aufhoeren, auch wenn ich nicht nachvollziehen kann, warum.

    Aus meiner persoenlichen Sicht gibt es eigentlich sein es Qt unter der GPL gibt, da nix mehr zu diskutieren, und spaetestens seit da LGPL draufsteht, sollte die Lizenzdiskussion aufgehoert haben.

    Zum konkreten Vergleich: Qt ist mit grossem Abstand das Portabelste, was im Moment im Gui-Bereich im Angebot ist. Was auf einer Plattform laeuft, laeuft auch auch auf den anderen (und das ist Windows, Linux, Mac, ein paar antike Unixe, WinCE, Symbian, Maemo/Meego; Android und iOS in Arbeit). Mit wxWidgets hast Du immer was, was auf A gut aussieht, auf B noch existiert und auf C noch nie von Nutzern gesehen wurde und auf D, E, F und G nicht mal entwickelt wird.

    Zum Thema Community-Support: Auf IRC Freenode im Moment: #qt 521 Nutzer, #wxwidgets 53 Nutzer. #qt-creator 116 Nutzer, #codeblocks 9. Braucht man nicht weiter zu kommentieren, denke ich.

    Ansonsten haette ich noch

    http://www.google.com/trends?q=qt%2C+wxwidgets&ctab=0&geo=all&date=all&sort=0

    zu bieten. Interessant sowohl der absolute Vergleich, als auch der Trend.



  • Jo Flamewars werden nicht aufhören solange Leute wie du so nen Schwachsinn über wxWidgets verbreiten und QT in den Himmel loben.



  • Vielleicht kann man das auch mal hinzufügen. Ich bin begeistert

    http://gac.codeplex.com/



  • Meine Güte, ist das praktisch nur ein Entwickler der da dranhängt? Das sieht ziemlich interessant aus, morgen wird durch den Code gewühlt.



  • Hallo, ich möchte unter Windows 7,8,10,… mit VC 2017 programmieren. Welche Klassenbibliothek sollte ich benutzen?
    Ich habe schon (bis 2005) mit VC 6, MFC programmiert und hatte gute Erfahrung damit.
    Jetzt geht es um ein neues Projekt: 1. Hardware Programmierung, 2. Datenbank, 3. Internet-Verbindung, …
    Meine erste Wahl wäre “VC 2017 mit MFC“. Nach meiner Recherche im Internet die Entwicklung von MFC ist gestoppt.
    Ist Desktop-Anwendung-Entwicklung mit WPF (Windows Presentation Foundation) eine gute Wahl?
    Wenn es um Web geht, dann benutze ich: PHP, JavaScript, jQuery, HTML, Linux server debian/ ubuntu, Postfix Mailserver (Dovecot, Ubuntu), Webserver Apache.
    Bei MFC kann man CHtmlView, CDHtmlDialog, … verwenden, um z.B. leichter HTML und JS für die Oberfläche zu benutzen. Kann man auch mit WPF für die Oberfläche von Desktop-Anwendungen auch HTML und JS verwenden?
    Wie wäre es die Wahl von Sciter (oder QT)?
    Laut https://sciter.com/: “… Sciter allows using time proven, robust, and flexible HTML and CSS for GUI definition, and GPU accelerated rendering.”
    Wäre es eine schlechte Entscheidung, wenn man VC 2017 mit Sciter kombinieren würde?

    (PS: Ja, ich habe die Beiträge im Forum gelesen, trotzdem möchte ich speziell in meinem Fall eure Meinung darüber hören)
    Vielen Dank im Voraus,
    Sandro.



  • Aus heutiger Sicht (2024):

    MFC wird zwar nicht mehr aktiv weiterentwickelt, ist aber stabil und für klassische Desktop-Anwendungen immer noch geeignet, besonders wenn du bereits damit vertraut bist.

    WPF ist eine gute Wahl für moderne Desktop-Anwendungen unter Windows, bietet umfangreiche Möglichkeiten zur Gestaltung und ist ideal, wenn du eine flexible und anpassbare Benutzeroberfläche benötigst. WPF unterstützt jedoch nicht direkt HTML und JavaScript für die UI. Für Web-ähnliche Inhalte könntest du das WebView2-Steuerelement nutzen (basiert auf Chromium).

    Qt ist robust und eine verbreitete Bibliothek für plattformübergreifende GUI-Entwicklung. Es bietet viele Funktionen für verschiedene Anwendungsbereiche, könnte aber eine steile Lernkurve haben, wenn du bisher hauptsächlich mit MFC gearbeitet hast.

    Sciter ist eine interessante Option, wenn du HTML/CSS für die GUI verwenden möchtest. Es ist leichtgewichtig und bietet GPU-beschleunigtes Rendering. Die Kombination von VC mit Sciter könnte eine gute Wahl sein, insbesondere wenn du eine plattformübergreifende Lösung in Betracht ziehst und dir die Flexibilität von HTML und CSS wichtig ist.

    WPF ist ideal für moderne, Windows-spezifische Anwendungen, während Sciter und Qt mehr Flexibilität und plattformübergreifende Möglichkeiten bieten.



  • @Erhard-Henkes
    Da hast wxWidgets und ImGui vergessen



  • Da hast du recht. wxWidgets ist eine inzwischen klassische Variante:
    https://www.henkessoft.de/wxWidgets/wxWidgets_001.html

    ImGUI kenne ich bisher nicht. Kannst du hierzu weiter ausführen?

    Selbst neige ich inzwischen eher zu C# und WinForms.
    Mit C++ verwende ich WinAPI, MFC oder SFML.



  • @Erhard-Henkes sagte in [HOWTO] Welches Toolkit für GUIS?:

    ImGUI kenne ich bisher nicht. Kannst du hierzu weiter ausführen?

    Ich habe mir bisher nur ImGui angeschaut und es ist ein kleines feines GUI Framework. Viel weiß ich daher nicht.

    Aber es gibt eine hübsche Webseite hierzu:

    https://github.com/ocornut/imgui


Log in to reply