GTKmm und wxWidgets - Beides Wrapper und dadurch GTKmm überflüssig?



  • Hi liebes Forum,

    da ich vor der Wahl zwischen GTK+ und wxWidgets stehe, kamen mir ein paar Fragen auf, auf die ich noch keine Antworten fand.

    Ich möchte mich in ein GUI-Framework einarbeiten, mit welchem ich Ωgroße Portabilität zwischen Windows und Linux habe. GTK+ zeichnet ja seine Widgets selbst und ist hier schon eine sehr sichere Methode. Wobei ich auch von wxWidgets angetan bin...hier hört man einfach viel mehr darüber.

    Fakt ist, dass ich jedoch C++ programmieren muss und möchte. So würde für GTK also nur der Wrapper GTKmm in Frage kommen. wxWidgets ist aber (wie ich lese) auch ein Wrapper...und zwar eher so ein Multitalent...auf Linux für GTK und Windows die Win32API.
    Ich sehe das so, dass wenn ich mich unter Linux befinde, wxWidgets die Aufgabe von GTKmm übernimmt...und unter Windows eben ein Wrapper für die Win32API. Das würde doch GTKmm überflüssig machen, wenn es in wxWidgets schon "integriert" ist und noch viel mehr.
    Oder stehe ich jetzt komplett auf dem Schlauch? 🙂

    Darüber hinaus würde mich interessieren, was so ein Wrapper genau macht. Es gibt im Netz zwar einige Fragen dazu, aber die Antworten sind nicht sehr hilfreich. GTKmm muss ja irgendwie meine in C++ geschriebene GUI in C umwandeln/übergeben. Findet das schon zum Compilieren statt? Oder erst zur Laufzeit? Sprich: Ist meine mit GTKmm geschriebene GUI im fertigkompilierten Zustand so, als hätte ich sie direkt mit GTK in C geschrieben? Oder findet erst zur Laufzeit eine Art Übersetzung zu GTK+ statt (was ja unperformanter wäre)?

    Ich hoffe, ihr könnt mir ein paar Tips geben.

    Liebe Grüße,

    Andi



  • Wrapper = Adapter, also irgendwas das eine Schnittstelle auf eine andere adaptiert, mappt, wrappt, was auch immer ... Also es nimmt eine Schnittstelle und laesst sie durch eine andere Bedienen, mittels einer zusätzlichen Zwischenschicht.

    Ist meine mit GTKmm geschriebene GUI im fertigkompilierten Zustand so, als hätte ich sie direkt mit GTK in C geschrieben? Oder findet erst zur Laufzeit
    eine Art Übersetzung zu GTK+ statt (was ja unperformanter wäre)?

    Nein, du erzeugst extra Code (Instruktions) die dein C++ interface auf die c-Methoden "anpassen und durchleiten". Idealerweisse kann der COmpiler da viel "wegoptimieren" aber alles wird nicht möglich sein.
    Aber Du erzeugst einen (sehr geringen) overhead, dafuer kannst du in c++ programmieren (meist übersichtlicherer und wartbarer code).
    Genau so ist es mit wxWidgets und GTK+ ... Wuerde wxWidgets direkt auf die WInAPI aufsetzen, waer es theorethisch schneller (bei entsprechender programmierung, unbedarft kann mans natürlich auch so programmieren das es langsammer laeuft ^^), DIe frage Nur isses messbar ? Würde sich der Aufwand lohnen ?
    GUI ist eh langsam, und das Langsamste daran ist der User ^^ auf den wartet die sowieso immer ^^

    C/C++ bibliothen sind in der Regel ausreichend schnell ... das sollte nicht das kriterium sein (wir sind hier nicht bei Java ^^)

    Dich sollten andere Kriterien leiten ....

    Gtk+ ist auch fuer windows verfügbar (gimp und einige andere nutzen dass).
    Also waer auch gtkmm unter windows möglich. Keine Ahnung wieviele systembesonderheiten die durchleiten.

    wxWIdgets ist eine nummer Abstrakter und damit komfortabler.

    Qt waer auch ne alternative ... ist umfangreicher, und sehr konfortabel.

    Ciao ....



  • Hi RHBaum,

    danke für die Antwort.

    Gtk+ ist auch fuer windows verfügbar (gimp und einige andere nutzen dass)

    Ja da wären wir schon bei meiner nächsten Frage 😋
    Von wxWidgets liest man immer, dass die mitgeführten Bibliotheken, um es auf anderen Rechnern zum laufen zu bringen, sehr klein sind.
    FLTK: extrem klein / wxWidgets: klein / Qt: groß
    Wie sieht es eigentlich mit GTK aus? Wenn ich Gimp unter Windows installiere, installiert es eine komplette Laufzeitumgebung von etwa 80 MB mit.
    Gebe ich beispielsweise jemanden ein minimales "Hello World" Programm, müsste er dann erst 80 MB installieren, damit dieses ausgeführt werden kann?

    Qt waer auch ne alternative ... ist umfangreicher, und sehr konfortabel

    Ja, ich wusste dass diese Empfehlung kommen wird 😃 An sich würde ich auch sofort zu Qt greifen, da man hier erstmal für die Zukunft ausgesorgt hat, weil es einem einfach viel Arbeit abnimmt. Die meisten Leute tendieren auch zu Qt...mich schrecken jedoch immer diese Argumentationen ab, dass sich Qt nicht wirklich an C++ hält und zum Teil sein eigenes Süppchen kocht. Auch die Sache mit dem MOC Prozessor. Und eben auch, dass man bei größeren Projekten viele Probleme (ja sogar fast unlösbare) bekommen kann und immer rumfrickeln werden muss.
    Ich selbst kann dazu leider nicht viel sagen...als noch nicht sehr Erfahrener C++ Programmierer hat dies jedoch erstmal etwas abgeschreckt 🙂

    Von wxWidgets las ich auch ein paar Mal, dass es Probleme geben könnte, da eben nicht eigene Widgets gezeichnet werden. So tendierte ich eher zu FLTK oder besser GTK+...die haben ihre komplett eigenen Widgets und das Programm läuft unter System B genauso wie unter System A programmiert. Falls ich bei kleinen Progrämmchen jedoch immer fast 100 MB mitliefern muss, ist das für mich schon eher ein "No Go". Also wie siehts hier genau aus?

    -------

    Und jetzt möchte ich nochmal deine Antwort zum Wrapper aufgreifen...
    Wenn ich mich jetzt also mal nur auf Linux beziehe und ein richtiges/pures GTK-Programm schreiben möchte (mit C++), würde es also keinen Unterschied machen, ob ich wxWidgets oder GTKmm nehme? Beides Wrapper, die zu den richtigen GTK-C-Bibliotheken durchleiten. Richtig?

    Liebe Grüße,
    Andi



  • Native Widgets sind wichtiger als deine Präferenz.
    GTK Widgets werden von GTK gezeichnet und sehen unter Windows deshalb fremd aus.
    Das schreckt viele User ab.

    Davon abgesehen bietet auch wxWidgets UI designer wie wxFormBuilder und wxRC nimmt dir noch mehr Arbeit ab wie das neu kompilieren deiner Anwendung weil du einen Button woanders hingesteckt hast.


Anmelden zum Antworten